在jquery.each()循环中,我一直认为 this
等于 valueOfElement
。有人可以解释区别吗?
示例:
$.each(object, function(i, val){
$('body').append('<b>valueOfElement:</b> ' + typeof val + ' - ' +
'<b>this: </b>' + typeof this + '<br/>');
});
结果:
valueOfElement: string - this: object
valueOfElement: boolean - this: object
valueOfElement: object - this: object
小提琴
答案在您链接到的文档中:
也可以通过此关键字访问该值,但是 JavaScript始终将该值作为对象包裹起来 简单的字符串或数字值。
访问this
时,所有值都嵌入对象中。
真正的原因可以在这条jQuery来源中找到:
callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
您可以将其与
进行比较(function(){console.log(this)}).call(1);
构建Number
的
,因为您无法在不是对象的东西上调用函数。
来自呼叫功能的MDN:
thisarg :
请注意,这可能不是该方法看到的实际值:如果 方法是在非图案模式代码中的功能,null和未定义的函数将 被全局对象替换,原始值将是 盒装。
我在使用this
而不是valueOfElement
时看到的唯一优势是:
- 简单性:您不必牢记回调的参数顺序
- 即使
valueOfElement
为原始类型
,也可以直接在
this
上使用函数的能力
this
关键字将作为JavaScript对象访问该元素。您可以像其他任何JavaScript对象一样获得其值,也可以将其包装($(this)
)将其制成jQuery对象。