将原型传递给对象的正确方法

时间:2020-10-10 21:28:04

标签: javascript

我对原型的理解如下:

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);

2 个答案:

答案 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作为正式的推荐方法,将现有对象的原型创建/分配给新创建的对象。

相关问题