[英]Is it possible to have an object method return a function object and if so how do you access it?
例如,如果我有:
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
做我要在那里做的最好方法是什么? 僅創建單獨的對象方法會更好嗎?
允許您鏈接方法的另一種有趣方式:
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 );
您需要在model.updateCat
之后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
如果要將其更改為對象:
(function() {
var foo1 = function() {}
var foo2 = function() {}
var model = {
updateCat: {foo1: foo1, foo2: foo2}
}
window.model = model;
})();
或者,如果您想使用return關鍵字:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.