2016-09-14 111 views
0

请参考给定的例子:怪异的行为

代码:

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

人如此它的原型会从对象中得到这样的理解的功能,它给返回对象(其还具有构造器& 原型)作为其属性。

来到第二个控制台语句。因为,约翰是人的一个实例,因此它必须与人拥有相同的原型。意思是,我应该得到一个对象作为回报。我如何得到undefined?有人可以解释吗?

回答

1

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

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

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

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

请记住,它更多的一个比解决方案快得多的黑客,谁知道什么时候会证明不方便。

1

我认为this questionthis question会帮助你。

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