以下是我的问题的简化版本。在不改变对象“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();
答案 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);