jquery.each() - "this"与valueOfElement的区别

7
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

Fiddle

2个回答

14
答案在您提供的文档中:
引用部分说明了值也可以通过this关键字访问,但是即使它是一个简单的字符串或数字值,Javascript也会始终将其包装为一个对象。
所有值在作为“this”访问时都嵌入在对象中。
真正的原因可以在这行jQuery源代码中找到。
callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {

你可以将其与其他事物进行比较

(function(){console.log(this)}).call(1);

构建一个 Number,因为你不能在不是对象的东西上调用函数。

MDN 的 call() 函数文档

thisArg

请注意,这可能不是方法实际看到的值: 如果该方法是非严格模式下代码中的函数,则 null 和 undefined 将被替换为全局对象,并且原始值将被封装。

我认为使用 this 而不是 valueOfElement 的唯一优点是:

  • 简单:您无需记住传递给回调的参数顺序
  • 即使 valueOfElement 是原始类型,也能直接在 this 上使用函数

好的,使用其中一个是否有任何优势?valueOfElement与this,也就是。 - Johan
1
@VisioN 我似乎不能在第一次尝试时写出正确的英语句子 :\ - Denys Séguret

0

this 关键字将作为 JavaScript 对象访问该元素。您可以像访问其他 JavaScript 对象一样获取它的值,或者您可以将其包装 ($(this)) 以使其成为 jQuery 对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接