原型 属性 的构造函数实例的奇怪行为

Weird behavior of constructor instance for prototype property

参考给定的例子:

代码:

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

Person 是一个函数,所以它的原型是从对象派生的,所以它在 return 中给出了一个对象(它还有构造函数和 proto)是可以理解的它的属性。

来到第二个控制台语句。因为,john 是 Person 的实例,因此它必须具有与 Person 相同的原型。意思是,我应该在 return 中得到一个 对象。我如何得到 undefined?有人可以解释吗?

我想this question and this question会对你有帮助。

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

A​​ class 有原型,class 的实例没有原型。

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

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

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

请记住,它更像是一种快速破解而不是解决方案,谁知道什么时候会证明不方便。