0

所以这是一个有点奇怪的问题,可能是不可能的,但我想知道是否有可能获得从 javascript 创建实例的函数的变量链接。

例如,我希望能够做这样的事情:

function MyObject(){
    console.log(this) // traces out the instance
    console.log(MyObject) // traces out the function
    console.log(this.parentClass) //Would like this to trace out the function as well. (or a similar call like it)
}

var test = new MyObject();

这是可能吗?谢谢!!

4

1 回答 1

1

如果函数prototype对象没有被替换,或者替换它们的代码将链接保持为默认状态,这是可能的。

constructor属性是(默认和约定)您要查找的属性:

var test = new MyObject();
console.log(test.constructor === MyObject); // "true"

不过,请注意上面的所有警告。例如,这是完全有效(并且不是特别不典型)的代码:

function MyObject() {
}
MyObject.prototype = {
    foo: function() { /* ... */ },
    bar: function() { /* ... */ }
};

这是一种常见的模式,尽管我不推荐。该代码不是添加到属性引用的MyObject.prototype对象(由 JavaScript 引擎在创建时设置的对象MyObject),而是创建一个全新的对象并将其分配给prototype属性,使其引用新对象。如果这样做了,那么该constructor属性已被破坏,并且您无法以您想要的方式使用它。

constructor函数默认对象的属性prototype是 JavaScript 的一个有趣之处。它在规范中非常清楚地定义了它会在那里(如果有人想阅读,它是§13.2),但据我所知,JavaScript 引擎中没有任何东西实际使用它。(例如,它不用于instanceof.)

于 2013-11-06T19:10:32.303 回答