我试图从教程网站重现这段代码
let animal = {
eat() {
this.full = true;
}
};
let rabbit = {
__proto__: animal
};
rabbit.eat();
我收到此错误"'proto'属性已弃用"。我做了很多研究来寻找">原型"的替代品,但我最终认为这样做是不好的习惯。以下是我的想法:
- 上面的例子在现实生活中并不好。动物和兔子应该是类而不是对象。我说的对吗?
- 如果这个例子不好,那么现实生活中需要获取/设置原型的好例子是什么?
在这里阅读所有为什么这是不好的做法的原因。
警告:根据现代 JavaScript 引擎如何优化属性访问的本质,更改对象的 [[原型]] 在每个浏览器和 JavaScript 引擎中都是非常缓慢的操作......
警告:在对象原型。proto目前在大多数浏览器中都得到支持,它的存在和确切的行为仅在 ECMAScript 2015 规范中作为遗留功能进行了标准化......
就像你自己提到的,这是一个已弃用的功能。如果您正在学习 ES6,那么课程确实是这里要走的路:
class Animal {
eat() {
this.full = true;
}
}
class Rabbit extends Animal {}
const rabbit = new Rabbit();
rabbit.eat();
兔子扩展了Animal.prototype
,而本身总是扩展Object.prototype
。