鉴于以下对象文字,我如何c从内部调用b?
更新 1 - 错过了我使用 JQuery 加载的一件事,它改变了上下文:
var a = {
b: function (e) {
$o.load(path, function (e) { // need to call c from here });
},
c: function (e) {
}
};
鉴于以下对象文字,我如何c从内部调用b?
更新 1 - 错过了我使用 JQuery 加载的一件事,它改变了上下文:
var a = {
b: function (e) {
$o.load(path, function (e) { // need to call c from here });
},
c: function (e) {
}
};
你应该可以在a.c()里面做.b:
var a = {
b: function(e) {
a.c();
},
c: function(e) {}
};
a.b(); // calls c
此外,this将绑定到a允许您使用以下方式访问其属性的对象this.property:
b: function(e) {
this.c();
},
只要它们在同一个对象上,您就可以使用该方法b调用它们。但是,对于传递给的函数表达式,我建议您使用指向它的指针。因此,您可以:cthis.c$obindthisb
var a = {
b: function (e) {
$o.load(path, function (e) {
this.c();
}.bind(this));
},
c: function (e) {
}
};
编辑:您创建和使用此对象的方式很脆弱。this指针可能指向任何东西,例如当您取消绑定方法或使用不同的上下文调用它时。即使使用a.c也不是万无一失的,因为其他代码可能会发生变化,并且在调用a该方法时会指向其他内容。ba
我会做这样的事情:
var a = function (a) {
a.b = function (e) {
$o.load(path, function (e) {
a.c();
});
};
a.c = function (e) {
};
return a;
}({});
此代码不能被篡改,并允许您创建私有变量和闭包。
var a = {
b: function (e) {
a.c();
},
c: function (e) {
// magic goes here
}
};
a将是一个闭包,因此它可以在函数中访问(也就是说,a定义在一个宽的外部范围内,每个函数中的较窄的内部范围都继承了该范围)。调用上下文无关;闭包是在定义函数的时间和地点形成的,因此在内部b,对象a将始终保持不变(不像this,它可以改变)。
尝试这个:-
var a = {
b: function(e) {
a.c();
},
c: function(e) {}
};
a.b();
需要最少更改的最简单的解决方案是使用jQuery.proxy():
var a = {
b: function (e) {
$o.load(path, $.proxy(function (e) { this.c(); }, this));
},
c: function (e) {
}
};