原型属性

时间:2016-09-14 08:07:37

标签: javascript prototypal-inheritance

参考给出的例子:

代码:

var Person = function (name) {
    this.name = name;
}
var john = new Person("John");
console.log(Person.prototype);//Object{}   
console.log(john.prototype);  //undefined

Person是一个函数,因此它的原型将从对象派生,因此可以理解为它返回一个Object(其中还包含Constructor& proto )作为其属性。

来到第二个控制台声明。因为,john是Person的一个实例,因此它必须具有与Person相同的原型。意思是,我应该有一个对象作为回报。我如何获得未定义?谁能解释一下?

2 个答案:

答案 0 :(得分:1)

我认为this questionthis question会对您有所帮助。

"实例"它没有原型,它们通过内部[[Prototype]]链接到它们,这是无法访问的。还有一个名为__proto__的属性,它是非标准的(不可靠),但指向原型。

答案 1 :(得分:1)

一个类有一个原型,一个类的实例没有原型。

该类必须创建新实例,因此它有一个原型。 john不必实例化新实例,因此他没有理由拥有原型。

如果你真的必须在类的实例中有原型,你可以这样做(假设函数不改变名称):

var Person = function (name) {
    this.name = name;
    this.prototype=Person.prototype;
}

请记住,这不仅仅是一个快速破解,而是一个解决方案,谁知道它何时会变得不方便。