关于javascript:原型属性抛出undefined

Prototype property throwing undefined

本问题已经有最佳答案,请猛点这里访问。

为什么instance的原型property抛出undefined?.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

我可以通过z.sayHello(访问sayhello方法,那么为什么我的instanceprototype返回的是未定义的而不是Test.prototype?.


混淆的问题是,prototype类有两种含义。

1。函数属性。任何函数都可以有一个prototype属性,它是一个对象。以你为例

1
2
3
Test.prototype = {
    sayHello: function() {}
}

此对象的属性将成为用此构造函数函数构造的对象的继承属性和方法:

1
var z = new Test();

现在,z有一个方法属性sayHello,您可以在Test.prototype对象的帮助下配置它。

2。实例原型。实例对象(在您的情况下为z)具有从上述点1到原型对象的内部引用。此引用在内部用于解析原型链中的属性和方法。但是,不应该直接访问此引用,并且不能使用实例的prototype属性访问此引用。

在chrome和firefox中,您可以使用__proto__属性,但不推荐使用它。

要获得在对象构造过程中使用的原型,应使用Object.getPrototypeOf

4


为了得到原型,使用Object.getPrototypeOf()。因此,在您的示例中,尝试使用EDOCX1[1]


您应该在对象上使用getPrototypeOf方法。如下所示:

1
Object.getPrototypeOf(z);

您可以这样做:

1
2
3
Test.prototype=Object.getPrototypeOf(z);
    console.log(Test.prototype);
    console.log(Object.getPrototypeOf(z));