javascript – 用goog.bind和goog.net.Xhrio.send理解“this”上下文

前端之家收集整理的这篇文章主要介绍了javascript – 用goog.bind和goog.net.Xhrio.send理解“this”上下文前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我调用以下代码时,我有点困惑:
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严格模式下运行,则值保持不变(未指定为“未定义”).

猜你在找的JavaScript相关文章