我对原型的理解如下:
let Animal = function() {
this.bark = "woof";
}
Animal.prototype.barkLoud = function() {
return this.bark.toUpperCase();
}
let x = new Animal();
x.barkLoud() = "WOOF";
上面的所有内容对我来说都是有意义的,但是随后我看到了一个教程,看来是将原型传递给对象的两种不同方式。这些是同一回事吗?如果是这样,哪种方法更好:
let obj = {
age: 45;
__proto__: Animal
}
与
let obj = {
age: 45;
}
obj.prototype = Object.create(Animal.protoype);
答案 0 :(得分:2)
根据经验,在JS中,在属性名称周围看到的下划线(_
)字符越多,实现细节越多-甚至对查询它的意愿也越低,更不用说了尝试修改。
尽管所有现有浏览器均支持__proto__
,但不建议使用它来建立原型。改用Object.create()。
顺便说一句,您所展示的两种方法甚至都不相同。参见__proto__
是指原型对象,但是Animal
不是原型对象-它是一个函数。 Animal.prototype
是一个将用作原型的对象(__proto__ value) for all the objects created by this function with
new`运算符。
因此第一个对象将无法解析原型链中的barkLoud
名称:
> obj.barkLoud // undefined
答案 1 :(得分:0)
__proto__
方法已被弃用,我从未见过在任何地方实现它。
将Object.create
作为正式的推荐方法,将现有对象的原型创建/分配给新创建的对象。