我在对象中定义了一些函数:
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();
我试图看看是否可以从子构造函数中调用父构造函数,但看起来该对象没有原型?跆拳道?
答案 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();