var abc = {
'a': 10,
'b': 10,
c: function() {
//like if I have many many functions in c
init_a();
multiple();
function init_a() {
abc.a = 30;
}
function multiple() {
alert(abc.a * abc.b);
}
function minus() {
alert(abc.a - abc.b);
}
return {
function myalert() {
var result = abc.a + abc.b;
alert(result);
}
}
},
d: function() {
abc.c.myalert(); // ??? error??
abc.c().myalert(); // ??? error?? **it run all functions in c but not just myalert, strange things happening...
}
}
abc.d();
在函数d?
中调用'myalert()'函数的语法是否正确?答案 0 :(得分:6)
myalert()
函数 是abc.c()
的本地函数,所以这是不可能的。
您可以让c()
返回myalert()
:
c: function() {
return function myalert() {
// whatever
}
}, d: function() {
this.c()()
}
请注意,不必命名返回的函数,即return function() { .. }
。
<强>更新强>
如果你想像this.c().myalert()
那样调用它,那么c()
需要直接返回一个对象而不是函数:
c: function() {
return {
myalert: function() { ... }
}
}
更新2
除c()
声明外,您的myalert()
函数现在还包含其他语句。调用时,init_a()
和multiple()
会在返回之前被调用。
我建议您重构代码,例如,将myalert()
移到主对象中:
var abc = {
a: 10,
b: 10,
c: function() { ... }
myalert: function() { ... }
d: function() {
this.myalert();
}
}
答案 1 :(得分:2)
您可以从c
返回包含myalert
的对象:
var abc = {
'c': function() {
return {
myalert: function() {
alert('foo');
}
};
},
'd': function(){
abc.c().myalert(); // foo
}
};
abc.d();
答案 2 :(得分:0)
c: function() {
return {
myalert : function() {
// whatever
}
}
}, d: function() {
this.c().myalert()
}