通常,致电this
将工作;但我在另一个上下文中调用该方法,因此this
引用该上下文而不是“父”对象。传入构造函数的函数是否可以访问构造函数的其他属性?
下面的代码:
var someConfig = {
things: [
{
attr1: 'foo',
attr2: 'bar',
action: function() {
console.log(this);
}
}
]
}
function Constructor(config) {
var self = this;
self.name = 'test';
self.things = config.things;
$.each(self.things, function(i, thing) {
thing.action();
});
}
var obj = new Constructor(someConfig);
console.log(obj);
Here's a jsfiddle。目标是使控制台中的两个对象相同,但action
方法的上下文中的this
将返回action
所属的原始对象,而不是构造函数。
我唯一能想到的就是将self
转换成action
,但我认为还有更好的办法。
谢谢。这对我有意义。我是面向对象的新手,所以我想我的问题是,这是我的设计不好,还是只是一个JavaScript特性?我通常希望对象的方法可以访问所有对象的数据。我应该在这里延伸吗? –
呃...考虑到(在Javascript中),单个函数可能是一个属性,它被添加到了多个不同的对象_at同时,它应该引用哪个对象的数据? – Martijn
在这种情况下,我想我会将'things'的成员直接复制到'self'中,以便您可以在函数中简单使用'this'。扩展将是一个更好的方法来到这里(把它们放在'Constructor'的'prototype'上)。 – Martijn