更改对象的__proto__的值是否被认为是不好的做法?

时间:2018-10-05 16:42:00

标签: javascript

我试图从教程网站复制这段代码

let animal = {
  eat() {
    this.full = true;
  }
};

let rabbit = {
  __proto__: animal
};

rabbit.eat();

我收到此错误“已弃用' proto '属性”。我做了很多研究,找到了“ proto ”的替代方案,但最终我认为这样做是不好的做法。这是我的想法:

    上面的例子在现实生活中并不好。动物和兔子应该是类而不是对象。我对吗?
  • 如果这个例子很糟糕,那么在现实生活中,哪个好例子需要获取/设置原型

1 个答案:

答案 0 :(得分:1)

阅读所有不当做法的原因here

  

警告:根据现代JavaScript引擎如何优化属性访问的性质,更改对象的[[Prototype]]在每个浏览器和JavaScript引擎中的操作都非常缓慢...

     

警告:尽管大多数浏览器现在都支持Object.prototype。 proto ,但ECMAScript 2015规范仅将其存在和确切行为标准化为遗留功能...

就像您提到自己一样,它已被弃用。如果您正在学习ES6,那么classes确实是前往此处的方法:

class Animal {
  eat() {
    this.full = true;
  }
}

class Rabbit extends Animal {}

const rabbit = new Rabbit();
rabbit.eat();

Rabbit扩展了Animal.prototype,它本身始终扩展了Object.prototype