例如,如果我有:
var model = {
updateCat: function(cat){
var foo1 = function(){
//do something
};
var foo2 = function(){
//do something else
};
return{foo1: foo1, foo2: foo2};
}
};
model.updateCat.foo1(cat); //does not work
做我想做的最好的方法是什么?创建单独的对象方法会更好吗?
答案 0 :(得分:2)
另一种有趣的方法,可以让你链接你的方法:
var model = {
updateCat : {
foo1 : function( cat ) {
// do tha thing
return this;
},
foo2 : function( cat ) {
// do things
return this;
}
}
};
model.updateCat.foo1(cat); //does work
model.updateCat.foo1(cat).foo2(cat); //does work
在您的示例中,updateCat
是一个未执行的函数,因此您不执行它()
,而是尝试使用它,就像它是一个对象({}
) updateCat.foo1
因此您可能会收到错误消息
期望分配或函数调用,而是看到表达式
代表model.updateCat.anythingHereIsUnreachable( bla );
答案 1 :(得分:0)
model.updateCat
之后需要括号,使其为model.updateCat().foo1()
。这是因为updateCat
本身是一个需要调用的函数,以便返回foo1 / foo2对象。
此外,看起来updateCat
函数需要参数cat
,而不是foo1
,因此.foo1(cat)
不正确。
var model = {
updateCat: function(cat){
var foo1 = function(){
//do something
};
var foo2 = function(){
//do something else
};
return{foo1: foo1, foo2: foo2};
}
};
model.updateCat(cat).foo1(); //does work
或者,您可以内联updateCat
函数,让updateCat
成为该函数结果的引用。请注意,这只适用于您只使用一个cat
,因为存储了调用updateCat(cat)
的结果并且匿名函数丢失了。
var model = {
updateCat: (function(cat){
var foo1 = function(){
//do something
};
var foo2 = function(){
//do something else
};
return{foo1: foo1, foo2: foo2};
})(cat)
};
model.updateCat.foo1(); //does work
答案 2 :(得分:0)
如果要将其更改为对象:
(function() {
var foo1 = function() {}
var foo2 = function() {}
var model = {
updateCat: {foo1: foo1, foo2: foo2}
}
window.model = model;
})();
或者如果你想使用return keyword:
var model = (function() {
var foo1 = function() {}
var foo2 = function() {}
var model = {
updateCat: {foo1: foo1, foo2: foo2}
}
return model;
// also return like this:
// return { updateCat: {foo1: foo1, foo2: foo2};
})();
现在你可以做到:
model.updateCat.foo1(cat);