【问题标题】:jquery.each() - "this" vs valueOfElementjquery.each() - “this” vs valueOfElement
【发布时间】:2012-10-18 20:52:24
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    答案在您链接到的文档中:

    该值也可以通过 this 关键字访问,但是 Javascript 将始终将 this 值包装为 Object,即使它是 一个简单的字符串或数值。

    当以this 访问时,所有值都嵌入到对象中。

    真正的原因可以在jQuery source这行找到:

    callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
    

    你可以比较一下

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

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

    来自MDN on the call function

    thisArg

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

    使用this 代替valueOfElement 的唯一优势是:

    • 简单性:您不必记住给回调函数的参数顺序
    • 即使valueOfElement 是原始类型,也可以直接在this 上使用函数

    【讨论】:

    • 好的,使用一个比另一个有优势吗? valueOfElement vs this,也就是。
    • @VisioN 第一次尝试我似乎无法写出正确的英文句子:\
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 2014-05-04
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      相关资源
      最近更新 更多