我想要做的是在JavaScript中提取函数的名称。我不久前得到了这个工作,它看起来像这样:
MyObj = function myobj(){};
extend = function(obj){
return /function (.+)\(/.exec(obj.constructor.toString())[1];
}
所以这是有趣的事情。当我以这种方式使用这个对象的原型时,一切正常:
MyObj.prototype.a = function(){}
MyObj.prototype.b = function(){}
extend(MyObj);
//->'myobj'
然而,当我像这样定义我的函数时:
MyObj.prototype = {
a : function(){},
b : function(){}
}
extend(MyObj);
//->'Object'
有没有人知道为什么后一种方法中的构造函数是JavaScript的本机代码(例如'Object')的一部分,而不是我的函数?
非常感谢任何帮助!
答案 0 :(得分:2)
尝试在第二种情况下添加构造函数属性
因为您正在覆盖prototype
,所以您还会覆盖obj.prototype.constructor
属性
所以像这样使用它:
MyObj.prototype = {
constructor : MyObj,
method1 : ...
}
答案 1 :(得分:0)
因为当您使用"MyObj.prototype.a"
时,您正在使用原生原型并为其添加新功能。
但是当你使用另一种方式时,你正在用一个新的Object替换本机原型。