(function(value) {
this.value = value;
$('.some-elements').each(function(elt){
elt.innerHTML = this.value; // possibly undefined (Why?)
});
})(2);
有人可以在上面的代码中解释'this'的价值吗?
我的理解:
this.value = value // Line 2
- 这里指的是全局对象
elt.innerHTML = this.value; // line 4
- 为什么这个'可能'未定义。请解释一下。
编辑:顺便说一下,我已经在这篇(How does the "this" keyword work?)帖子(我从上面得到上面的代码)中详细阅读了“this”的解释。
答案 0 :(得分:4)
在作为回调发送到.each()方法的函数内部,this
引用DOM元素(对于此集合中包含在jQuery对象中的每个元素),而不是window
:
更重要的是,回调是在当前的上下文中触发的 DOM元素,因此关键字
this
引用元素。
(顺便说一句,这有点多余elt
arg;至少,为什么你同时使用this
和elt
来引用它们有点不清楚事情那里)。
然而,并非所有DOM元素都定义了value
属性:afair,它仅针对元素的子集设置:input
,select
,textarea
,{{1}这可能是你得到option
的原因。
您可以使用jQuery.proxy()方法轻松调整此选项:
undefined
现在发送到$('.some-elements').each($.proxy(function(elt){
elt.innerHTML = this.value;
}, this));
的函数使用外部.each()
作为其上下文(显然,它不再指向DOM元素,正如this
那样)。
答案 1 :(得分:2)
在第4行中,this.value
指的是$('.some-elements')
的“每个”实例。在任何函数内部,它然后引用该函数正在操作的对象。在匿名函数的情况下,它是全局范围。
答案 2 :(得分:2)
JS解释器用来确定this
的基本算法如下所示。
call
和apply
方法调用函数时,this
是call
或apply
的第一个参数。bind
方法创建的绑定函数调用函数时,this
是bind
的this-value参数。obj.method(params)
)调用时,this
是从中提取方法的对象,在示例中为obj
。this
是非严格模式下的全局对象,否则为null
。由于each
使用(1)中的特殊方法将容器作为this
传递,因此内部函数中的this
应该是$('.some-elements')
的结果,一个数组jquery包装了DOM节点。