的Javascript:以不同的方式调用对象的方法

问题描述:

下面的代码:
JavaScript部分:的Javascript:以不同的方式调用对象的方法

ContatoreCostr = function(nome){ 
     this.nome = nome; 
     this.cont = 0; 
     this.inc = function() { 
     alert(this + "--" + this.nome + "--" + this.cont++); 
     }; 
    } 
    var ccc= new ContatoreCostr("zio"); 

window.onload = function() { 
    //document.getElementById("bid").onclick = ccc.inc; // DO NOT WORK 
    document.getElementById("bid").onclick = function(){ccc.inc()}; //WORKS 
} 

HTML部分:

<button onClick="ccc.inc()">Buttton1</button> 
<button id="bid">Bottone2</button> 

这里有两种不同的方式来调用内部的相同方法相同的对象,事实上'继续'属性继续增加任何按钮被点击。上下文改变:点击Button1时是窗口,点击Button2时是tagButton,但没关系。 我不明白为什么我*分配函数(){ccc.inc()}而不是ccc.inc那。在我看来,应该没有区别。 Tnx

()缺失的第一种方法? 应该

document.getElementById("bid").onclick = ccc.inc(); 
+0

不,如果你把括号inc()在加载页面时进行评估,那不是你想要的。 – chairam 2012-02-16 16:19:58

“这个”只有当此功能已经由“实例”直接调用的工作,就像在ccc.inc()。当作为参考传递时,“this”指的是调用上下文,在这种情况下是可点击元素。

+0

ok,所以你说:在'不工作'的情况下,inc()被称为int'this'的上下文,它是buttonTag。与'作品'的情况相反,应该像这样:buttonTag就是这个。解释器考虑加载ccc,即先前实例化的对象,然后在ccc上调用inc()。这说得通。事实上,我花了一些时间来弄清楚'作品'的解决方案,我通过试验和错误来进行研究,但我仍然无法弄清楚设计'作品'解决方案的一系列逻辑步骤。我会感谢任何能够深入推荐文档的人。谢谢。 – chairam 2012-02-16 20:07:51

+0

呃...是的,没有工程案例在调用对象的上下文中执行,这是点击元素。在互联网上似乎有很多关于这方面的解释,请看这里的例子:http://jibbering.com/faq/notes/closures/ – Ixx 2012-02-16 21:17:07

+0

我编辑了我的帖子。我不能给你一个深刻的解释,因为这个概念现在对我来说只是表面上很清楚。当我有时间时,我还会阅读文档^^ – Ixx 2012-02-16 21:29:20