繁体   English   中英

当以两种不同的方式定义原型时,Javascript构造函数的行为会有所不同

[英]Javascript constructor behaves different when defining prototype in two different ways

我想要做的是在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')的一部分,而不是我的函数?

任何帮助将不胜感激!

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

MyObj.prototype = {
    constructor : MyObj,
    method1 : ...
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM