我正在使用Chrome扩展程序教程(完整代码如下)。我不明白这一点,这与requestKittens方法的第3行有关
req.onload = this.showPhotos_.bind(this);
和showPhotos方法的第1行:
var kittens = e.target.responseXML.querySelectorAll('photo');
我试图了解e.target.responseXML如何指向请求的响应XML。这就是我到目前为止的想法:在调用此函数的行中(requestKittens()
的第3行),this
指向kittenGenerator
对象,这意味着{{1} }被绑定为kittenGenerator
的第一个参数。所以showPhotos()
中的参数e
应为showPhotos()
,对吧?
如果这是真的,那么kittenGenerator
的第一行......
showPhotos()
...说var kittens = e.target.responseXML.querySelectorAll('photo');
有一个属性kittenGenerator
。但是我在Chrome控制台中检查过它并没有 - 所以我的逻辑出现了错误。有人能帮忙吗?
target
答案 0 :(得分:0)
bind的第一个参数定义了部分应用的上下文。
req.onload = this.showPhotos_.bind(this);
有效,因为XMLHttpRequest使用event作为其onload
处理程序的第一个参数。 e.target
来自哪里。
为了给出一个简单的bind示例,请考虑以下内容:
function add(a, b) {
return a + b;
}
var addTwo = add.bind(null, 2);
addTwo(10); // yields 12
如果为bind定义上下文(即除null之外的其他内容),则可以使用函数中的this
来访问该上下文。