原型 属性 的构造函数实例的奇怪行为
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;
}
请记住,它更像是一种快速破解而不是解决方案,谁知道什么时候会证明不方便。
参考给定的例子:
代码:
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;
}
请记住,它更像是一种快速破解而不是解决方案,谁知道什么时候会证明不方便。