admin管理员组文章数量:1405750
Given the following object literal how do I call c
from within b
?
Update 1 - missed one thing I use JQuery load, which changes the context:
var a = {
b: function (e) {
$o.load(path, function (e) { // need to call c from here });
},
c: function (e) {
}
};
Given the following object literal how do I call c
from within b
?
Update 1 - missed one thing I use JQuery load, which changes the context:
var a = {
b: function (e) {
$o.load(path, function (e) { // need to call c from here });
},
c: function (e) {
}
};
Share
asked Oct 13, 2012 at 14:29
JsCoderJsCoder
2,2338 gold badges35 silver badges66 bronze badges
5 Answers
Reset to default 4You should be able to do a.c()
inside .b
:
var a = {
b: function(e) {
a.c();
},
c: function(e) {}
};
a.b(); // calls c
Also, this
will be bound to the a
object which will allow you to access its properties using this.property
:
b: function(e) {
this.c();
},
Try this:-
var a = {
b: function(e) {
a.c();
},
c: function(e) {}
};
a.b();
var a = {
b: function (e) {
a.c();
},
c: function (e) {
// magic goes here
}
};
a
will be a closure so it's accessible in the functions (that is, a
is defined in an wide, outer scope, which the narrower, inner scopes in each function inherit). Calling context is irrelevant; closures are formed when and where the functions are defined, so inside b
, object a
will always stay the same (unlike this
, which can change).
From the method b
you may call c
using this.c
as long as they are on the same object. However for the function expression being passed to $o
I would suggest you bind
the this
pointer of b
to it. Thus you do:
var a = {
b: function (e) {
$o.load(path, function (e) {
this.c();
}.bind(this));
},
c: function (e) {
}
};
Edit: The way you're creating and using this object is fragile. The this
pointer may point to anything, such as when you unbind the methods or call it with a different context. Even using a.c
isn't foolproof as other code may change a
and when the method b
is called a
will point to something else.
I would do something like this:
var a = function (a) {
a.b = function (e) {
$o.load(path, function (e) {
a.c();
});
};
a.c = function (e) {
};
return a;
}({});
This code can not be tampered with and allows you to create private variables and closures.
The easiest solution which requires the minimum changes is to use jQuery.proxy()
:
var a = {
b: function (e) {
$o.load(path, $.proxy(function (e) { this.c(); }, this));
},
c: function (e) {
}
};
本文标签: jqueryJavaScript object call one method from anotherStack Overflow
版权声明:本文标题:jquery - JavaScript object call one method from another - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744918658a2632152.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论