0

我想要做的是在 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 的本机代码(例如“对象”)的一部分,而不是我的函数?

任何帮助将不胜感激!

4

2 回答 2

2

尝试在第二种情况下添加构造函数属性。
因为您正在覆盖prototype,所以您也在覆盖该obj.prototype.constructor属性。
所以像这样使用它:

MyObj.prototype = {
    constructor : MyObj,
    method1 : ...
}
于 2012-09-06T07:18:24.027 回答
0

因为当您使用 时"MyObj.prototype.a",您正在使用本机原型并向其添加新功能。

但是当你使用另一种方式时,你正在用一个新的对象替换原生原型。

于 2012-09-06T07:14:49.460 回答