簡體   English   中英

對象方法是否可以返回函數對象,如果是,則如何訪問它?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM