2012-07-24 84 views
1

對不起,長篇大論冠軍,但我認爲它總結我的問題通過這個(對象)到的對象的方法一個嵌套的方法

我創建了一個的jsfiddle削減和創建的簡化問題,我困境 http://jsfiddle.net/afw6k/3/

<input id="txtA"/> 
<!-- after setupOnclick is executed my onlick for txtA should be onclick="someObj.log("Clicked!")"--> 
<script> 
    function someObject(field){ 
     this.field = field; 

     this.log = function(msg){ 
      if(this.field.value != "") this.field.value += ", "; 
      this.field.value += msg 
     } 

     this.setupOnlick = function(){ 
      field.onlick = function(){//So how do I pass this (as in someObject) to this? 
       this.log("Clicked!"); //As if I have written someObj.log("Clicked!"); 
      } 
     } 
    } 

    var someObj = new someObject(document.getElementById("txtA")); 
    someObj.setupOnlick(); 
</script> 

我並不想點擊時簡單地寫東西到一個文本框,但上面是什麼,我想在這裏實現的簡化版本。

通過這個(對象)爲目標函數嵌套函數

還是有更好的方法來做到這一點?

回答

4

保存this在一個變量:

this.setupOnlick = function(){ 
     var theObj = this; 
     field.onlick = function(){//So how do I pass this (as in someObject) to this? 
      theObj.log("Clicked!"); //As if I have written someObj.log("Clicked!"); 
     } 
    } 

this值僅僅是一個值,因此它可以被複制到另一個變量。運行時,變量「theObj」將保留在「click」處理程序的範圍內。

+0

我們真的需要一個典型的問題來關閉這樣的dups。 – 2012-07-24 12:58:52

+0

@MattBall是的 - 我希望有一些方法可以確保這個一般性主題被強迫在每個人面前隨意漫步到JavaScript開發人員的角色:-) – Pointy 2012-07-24 13:00:19

+0

感謝您的快速響應。對不起,如果這是一個重複的問題。我認爲問題在於每個人都以不同的方式解釋和說出問題,因此必須發現相關的問題。它只是讓我誤解了它是如何失去這個變量的範圍,還是僅僅在一個層面上下降了? – 2012-07-24 13:11:12