获取创建实例的父函数

时间:2013-11-06 19:07:59

标签: javascript

所以这是一个有点奇怪的问题,可能是不可能的,但我想知道是否有可能获得从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();

这一切都可能吗?谢谢!

1 个答案:

答案 0 :(得分:1)

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

constructor属性(默认为 convention )是您要查找的属性:

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

请注意上面的所有注意事项。例如,这是完全有效的(而不是特别非典型的)代码:

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

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

函数上的默认constructor对象上的prototype属性对JavaScript来说很有趣。它在规范中非常明确地定义它将存在(如果有人想要读取它是§13.2),但据我所知,JavaScript引擎中没有任何实际使用它。 (例如,它不用于instanceof。)