创建对象后的JavaScript函数

时间:2017-02-08 18:41:40

标签: javascript javascript-objects

我有一个上下文定义的上下文函数类型:

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();

任何解决方案?

4 个答案:

答案 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

上定义method2
Context.prototype.method2 = function () {
    console.log("injected method2dfd");
};