Javascript回调,引用自己的对象

时间:2014-01-16 13:15:37

标签: javascript callback

以下是我的问题的简化版本。在不改变对象“o”的定义而不使用名称“obj”的情况下,我如何在foo中引用obj。

var obj = {
    foo: function () {
        alert(this.greet); // => undefined, obj.greet works but not feasible for my case
    },
    greet: "hi"
};

var o = {
    m: obj.foo
};

o.m();

2 个答案:

答案 0 :(得分:6)

创建一个新函数,使用正确的上下文调用旧函数。 The bind method会在足够现代的浏览器中为您完成此操作。

var o = {
    m: obj.foo.bind(obj)
};

如果您想支持旧版浏览器:

var o = {
    m: (function (context) { 
        return function () { 
            context.foo(); 
        };
    }(obj))
};

答案 1 :(得分:0)

如果您不想或不能更改对象o的定义,您可以执行以下操作:

而不是

o.m();

DO

o.m.call(obj);