参考给出的例子:
代码:
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相同的原型。意思是,我应该有一个对象作为回报。我如何获得未定义?谁能解释一下?
答案 0 :(得分:1)
我认为this question和this question会对您有所帮助。
"实例"它没有原型,它们通过内部[[Prototype]]
链接到它们,这是无法访问的。还有一个名为__proto__
的属性,它是非标准的(不可靠),但指向原型。
答案 1 :(得分:1)
一个类有一个原型,一个类的实例没有原型。
该类必须创建新实例,因此它有一个原型。 john
不必实例化新实例,因此他没有理由拥有原型。
如果你真的必须在类的实例中有原型,你可以这样做(假设函数不改变名称):
var Person = function (name) {
this.name = name;
this.prototype=Person.prototype;
}
请记住,这不仅仅是一个快速破解,而是一个解决方案,谁知道它何时会变得不方便。