对象不会继承父对象函数

时间:2013-11-29 02:22:11

标签: javascript jquery object

我在对象中定义了一些函数:

var functions = {
    __construct: function(){
        console.log(this);
        this.prototype.__construct(); // <problem
    }
};

我将这个对象与另一个函数合并(在我创建函数的新实例之后):

var plugin = function(){};

plugin.prototype.__construct = function(){
    console.log('parent');
};

var i = new plugin();
i = $.extend({}, i, functions);

但之后我尝试调用__construct函数:

i.__construct();

我收到此错误:

  

未捕获的TypeError:无法调用未定义的方法'__construct'

这是因为这一行:

this.prototype.__construct();

我试图看看是否可以从子构造函数中调用父构造函数,但看起来该对象没有原型?跆拳道?

1 个答案:

答案 0 :(得分:2)

不确定你在这里尝试做什么,但在使用你提供的代码时我确实有一个__construct函数:

  var functions = {
        __construct: function(){
          console.log(this);
          this.prototype.__construct(); // <problem
        }
      };
var plugin = function(){};    
plugin.prototype.__construct = function(){
  console.log('parent');
};
var i = new plugin();
i = $.extend({}, i, functions);
console.log(i.__construct===functions.__construct);//true
console.log(i.__construct===plugin.prototype.__construct);//false

不确定你认为this.prototype会是什么,也许this answer将清除用于(共享成员)的原型以及this的含义(特定于实例)。您可以在原型链的下游或实例中隐藏原型中定义的共享成员,但这不是您在此处所做的。

如果您想动态扩展使用构造函数创建的实例,可以执行以下操作:

var functions = {
    __construct: function(){
      this.constructor.prototype.__construct.call(this);
    }
};

var Plugin = function(){};
Plugin.prototype.__construct = function(){
  console.log('parent');
};

var i = new Plugin();
i = $.extend(i,functions);
i.__construct();