我有一个上下文定义的上下文函数类型:
var Context = function () {
this.run = function () {
method1();
method2();
}
var method1 = function () {
}
}
如定义中所示, method2 未在上下文中定义。我需要Context的每个实例都传递这个方法的实现。
var c = new Context();
// This does not work! because the call in run() function
// is not this.method2();
c.method2 = function () {
alert("injected method2");
};
c.run();
我需要在运行中保留 method2(),而不使用此对象,即 this.method2();
任何解决方案?
答案 0 :(得分:1)
您可以将method2
添加到window
对象而不是c
对象,在这种情况下它会起作用。
请注意,这是设计不佳的明确指标。您应该以不同的方式考虑这一点。
答案 1 :(得分:1)
如果您可以在创建method2
之前定义Context
,那么它将毫无问题:
function method2() {
alert(2);
}
var c = new Context();
c.run();
答案 2 :(得分:0)
回调方法:
var Context = function (callback) {
this.run = function () {
method1();
if(callback) callback();
}
var method1 = function () {
}
}
var c = new Context(function () {
alert("injected method2");
});
c.run();
答案 3 :(得分:0)
如果您将run方法更改为以下方法,则应按预期工作
this.run = function () {
method1();
this.method2();
}
更新:我刚刚意识到您希望能够在Context对象的所有实例上执行此操作。在这种情况下,您还需要在Context.prototype
而不是c
Context.prototype.method2 = function () {
console.log("injected method2dfd");
};