2012-07-24 54 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

相关问题