为什么是原型property的instance投掷undefined?。
function Test(name){
this.name = name;
}
Test.prototype = {
constructor: Test,
sayHello : function(){
console.log(this.name);
}
}
var z = new Test("Hello");
console.log(z.prototype); //undefined
console.log(zUtils.constructor); // Test
Run Code Online (Sandbox Code Playgroud)
我可以通过z.sayHello()访问 sayHello 方法,那么为什么我instance prototype返回的我是 undefined 而不是Test.prototype?。
混淆的问题是“prototype种类”这个词有两种含义。
1. 功能属性。任何函数都可以有一个prototype属性,它是一个对象。在你的情况下
Test.prototype = {
sayHello: function() {}
}
Run Code Online (Sandbox Code Playgroud)
此对象的属性将成为使用此构造函数构造的对象的继承属性和方法:
var z = new Test();
Run Code Online (Sandbox Code Playgroud)
现在z有一个方法属性sayHello,您可以在Test.prototype对象的帮助下对其进行配置。
2. 实例原型。在您的情况下z,实例对象具有对上述第 1 点原型对象的内部引用。此引用在内部用于解析原型链中的属性和方法。但是这个参考不应该直接访问,你不能访问此参考prototype实例的属性。
在 chrome 和 Firefox 中,您可以使用__proto__property,但不推荐使用它。
要获得在对象构造期间使用的原型,您应该使用Object.getPrototypeOf:
Object.getPrototypeOf(z) === Test.prototype; // true
Run Code Online (Sandbox Code Playgroud)