2014-11-06 169 views
0

在下面的form對象中,從「檢查」函數中,我該如何調用通知函數的「顯示」和「隱藏」方法?如何從另一個函數內調用函數的方法

(function (namespace, $, undefined) { 
    var form = { 
     check : function(){ 
      form.notification.show(); // Generates an error 
     }, 

     notification : function(){ 
      this.show = function(){ 
       ... 
      }; 
      this.hide = function(){ 
       ... 
      }; 
     } 
    }; 
}(window.namespace = window.namespace || {}, jQuery)); 

隨着form.notification.show()我收到以下錯誤:

遺漏的類型錯誤:無法讀取屬性未定義

回答

1

嘗試定義notificationform然後參考它:

var notification : { // no function here 
     show : function(){...}, // avoid "this" 
     hide : function(){...} 
}; 

var form = { 
    check : function(){ 
     notification.show(); // <-- Use here 
    }, 

    notification : notification // and here 
}; 

(我省略了爲清晰起見,保護代碼爲)。

接下來的問題是,this.show =將函數分配給this,而函數notification()被執行。 this不是notification

+0

奇怪 - 這似乎沒有任何效果。我想知道現在是否在我的「工作」代碼中有衝突... – verism 2014-11-06 13:28:28

+0

好吧,看來我*有*可以訪問我的原始代碼中的通知功能。如果我在check函數中運行'console.log(form.notification)',它會返回腳本。有什麼想法嗎? – verism 2014-11-06 13:59:24

+0

查看我的編輯。 'show'放入'this'和'this!== form.notification'(最有可能)。 – 2014-11-06 14:01:47

0

你封閉它的節目「,所以你需要返回它,這將爲您揭示它,如果您在Chrome控制檯中鞭打以下內容,則會看到您可以訪問表單對象

(function (namespace, $, undefined) { 

var form = { 

     check : function(){ 
      form.notification.show(); // Generates an error 
     }, 

     notification : function(){ 
      this.show = function(){ 

      }; 
      this.hide = function(){ 

      }; 
     } 


}; 
return{form:form};}(window.namespace = window.namespace || {}, jQuery)); 

我所做的只是添加了您的代碼

return{form:form}; 

表單對象之後。希望這有助於

編輯

如果你想只公開形式的某些部分,例如僅通知,您可以修改,像這樣的回報:

return{form.notification: notification} 
+0

不知道爲什麼我被拒絕,但希望這有助於 – Jay 2014-11-06 13:17:38

+0

不完全確定爲什麼它被低估。然而,這不是一個可行的選擇,因爲沒有任何東西可能會在返回聲明之後。 – verism 2014-11-06 13:22:56

+0

不是真的複製上面的代碼並將其粘貼到您的控制檯。然後輸入window.namespace並查看它返回的內容。 – Jay 2014-11-06 13:26:11

相關問題