鉴于以下对象文字,我如何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
调用它们。但是,对于传递给的函数表达式,我建议您使用指向它的指针。因此,您可以:c
this.c
$o
bind
this
b
var a = {
b: function (e) {
$o.load(path, function (e) {
this.c();
}.bind(this));
},
c: function (e) {
}
};
编辑:您创建和使用此对象的方式很脆弱。this
指针可能指向任何东西,例如当您取消绑定方法或使用不同的上下文调用它时。即使使用a.c
也不是万无一失的,因为其他代码可能会发生变化,并且在调用a
该方法时会指向其他内容。b
a
我会做这样的事情:
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) {
}
};