原型属性抛出未定义

Sha*_*ane 4 javascript oop

为什么是原型propertyinstance投掷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?。

dfs*_*fsq 5

混淆的问题是“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)