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