有
总之,我对两者之间的区别感到困惑
handler.getName()
和
function(){handler.getName()}
有关详细信息,请输入代码:
Jsfiddle checking url
我的问题是:
我使用 obj.method 时,此可以参考处理程序和
当我使用 obj.method2 时,这个引用 obj
我知道这是封闭的事情,但我只是不知道如何解释这些事情
希望有人能提供帮助,非常感谢!
答案 0 :(得分:1)
在第一种情况下,您直接调用处理程序对象的方法getName
,在第二种情况下,您实际上将函数的浅层副本放入obj
对象中,因此当您调用时它将运行相同的代码但使用本地names
属性,因此您获得"obj"
。如果要删除names
对象中的obj
,则该值将是未定义的。它与闭包无关,您只需将函数的内容复制到新的对象方法中,该函数中的this
将引用新的主对象。
答案 1 :(得分:0)
您的代码中的差异并非您认为的那样。在.method中,你这样做:
handler.getName()
在.method2中,您可以:
handler.getName
如果您将method2更改为:
handler.getName()
您将看到方法和方法2的结果相同。
答案 2 :(得分:0)
如果函数被调用为对象上的方法,那么 this 指的是 对象:
var x = {
a: 1,
f: function() {return this.a;}
};
document.write(x.f()); // writes 1
输入 obj.method()后,此指的是 obj (尝试添加 handler.getName()之前的语句 document.write(this.names)。) 然后 getName()是 调用处理程序,以便 this 引用 handler.getName()中的处理程序。
函数 handler.getName 仅分配给 obj.method2 ,尚未调用 this 尚未受约束。当调用 obj.method2()时,此绑定到 method2()中的 obj 。
您也可以尝试全球范围:
var f = handler.getName;
f(); // now window.names = "the window" is written