当我调用以下代码时,我有点困惑:
goog.net.XhrIo.send("/welcome",goog.bind(this.handleWelcome,this));
我有这个签名的功能:
myproject.MyClass.prototype.handleWelcome = function(response)
在我绑定之前,handleWelcome的上下文无法访问我的Javascript类myproject.MyClass的实例字段(可以理解).在信息here之后,我现在有了类实例的上下文.一切都很好.
在我做出改变之前,“这个”的背景是什么?
请原谅我正在使用的任何非Javascript惯用语 – 我对Java更熟悉并且可能使用大杂烩术语.
编辑
最初我有一些关于什么参数被传递给回调的问题(在这种情况下是一个目标类型为goog.net.Xhrio的事件),但主要的问题是关于这个和绑定,所以我删除了切向q.
解决方法
goog.bind相当于
function.prototype.bind,但是第一个参数是要绑定的函数,第二个是应该绑定的“this”值,任何剩余的参数都绑定到函数形式参数.
JavaScript具有第一类函数,但它们不是继承与“this”值绑定,因此除非您绑定它,否则值取决于它的调用方式:
var x = { f : handler }; x.f(); // handler is called with "x" as the this value. handler(); // unspecified this
传统上,如果“this”值未指定,未定义或为null,则通常将其强制转换为全局此“窗口”.但是,如果您在EcmaScript 5严格模式下运行,则值保持不变(未指定为“未定义”).