2012-06-25 74 views
0

我想在我的腳本中使用一個函數數組。 我使用命名空間對象,當我使用這個數組時,我所有的函數都是undefined如何在Javascript命名空間腳本中創建一個函數數組

如何創建這個具有良好功能的數組引用來處理這個processAllFunction

見我的代碼:

var myns = myns || {}; 
myns.test = myns.test || {}; 
myns.test.util = { 
    myOne: function(m) { 
     return m; 
    }, 
    myTwo: function(m) { 
     return m; 
    }, 
    processAllFunction: function(m) { 
     for(var i=0; i<this.replaceFilters.length; i++) { 
      if(typeof(this.replaceFilters[i])==='function') { 
      m= this.replaceFilters[i](m); 
     } 
     } 
     console.log(this.replaceFilters); // undefined functions 
     return m; 
    }, 
    replaceFilters: [this.myOne, this.myTwo] 
}; 

回答

0

我找到了解決方案,從對象外部(聲明後)使用replaceFilters。

myns.test.util = { 
    myOne: function(m) { 
     return m; 
    }, 
    myTwo: function(m) { 
     return m; 
    }, 
    processAllFunction: function(m) { 
     for(var i=0; i<this.replaceFilters.length; i++) { 
      if(typeof(this.replaceFilters[i])==='function') { 
      m= this.replaceFilters[i](m); 
     } 
     } 
     console.log(this.replaceFilters); 
     return m; 
    } 
}; 
myns.test.util.replaceFilters = [this.myOne, this.myTwo]; 

用這種方法,我沒有問題this

1

在代碼中,無論是thiswindow或到this的功能範圍,你要定義myns的價值,這就是爲什麼你看到undefined。你需要的是對調用對象的引用。您應該能夠像這樣做:這不是簡單地replaceFilters具有值[this.myOne, this.myTwo]

var myns = myns || {}; 
myns.test = myns.test || {}; 
myns.test.util = { 
    myOne: function(m) { 
     return m; 
    }, 
    myTwo: function(m) { 
     return m; 
    }, 
    processAllFunction: function(m) { 
     for(var i = 0; i < this.getReplaceFilters().length; i++) { 
      if(typeof(this.getReplaceFilters()[i]) === 'function') { 
       m= this.replaceFilters[i](m); 
      } 
     } 
     return m; 
    }, 
    getReplaceFilters: function() { 
     return [this.myOne, this.myTwo]; 
    }  
}; 

注意,現在是返回[this.myOne, this.myTwo]功能。這是因爲當你現在撥打myns.test.util.getReplaceFilters,this指向my.test.util。當您致電myns.test.util.processAllFunction()時,this也會發生同樣的情況; this再次設置爲myns.test.util。當您在processAllFunction內撥打getReplaceFilters時,也使用this的這個值。

+0

感謝'this'解釋,但是我不能用這個方法從類/名稱空間以外修改我的過濾器...... – Aure77

相關問題