直接返回'这个'之间有什么区别?并间接返回对象'?在创建jQuery插件时

时间:2017-10-08 12:46:20

标签: javascript jquery

我创建了一个jQuery插件

(function($) {
    'use strict';

    $.fn.charCount = function() {

return this.each(function(index,element){
  $(element).keyup(function updateCharCounter() {
        var $me = $(this),
            maxLength = parseInt($me.attr('maxlength'), 10),
            charCount = $me.val().length,
            $counter = $me.siblings('.limit');

        $counter.text('limit: ' + maxLength + ' characters. remainig: ' + (maxLength - charCount));

    });
});

    }
}(jQuery));

上面的代码它可以正常工作,因为我直接return this对象

但是当我将代码更改为间接对象插件时不起作用

(function($) {
    'use strict';

    $.fn.charCount = function() {
$oThis=this;
$oThis.each(function(index,element){
  $(element).keyup(function updateCharCounter() {
        var $me = $(this),
            maxLength = parseInt($me.attr('maxlength'), 10),
            charCount = $me.val().length,
            $counter = $me.siblings('.limit');

        $counter.text('limit: ' + maxLength + ' characters. remainig: ' + (maxLength - charCount));

    });
 });
 return $oThis;
    }
}(jQuery));

你可以看这个插件:https://jsfiddle.net/djary/yo6nLmzg/3/ directlyindirect return this

之间有何区别?

为什么在这种情况下返回this.each是有效但$oThis不起作用? 哪里错了?

1 个答案:

答案 0 :(得分:2)

如果您检查控制台,则可以看到错误为df = pd.merge(d1.assign(A=1), d2.assign(A=1), on='A').drop('A', 1) print (df) Name Age Subject Grade 0 Alice 18 Science A 1 Alice 18 Math C 2 Alice 18 English B 。这是因为您指定了df = pd.concat([d1.reindex(d2.index, method='ffill'), d2], axis=1) print (df) Name Age Subject Grade 0 Alice 18 Science A 1 Alice 18 Math C 2 Alice 18 English B 。这意味着所有变量定义必须以$oThis is not defined为前缀 - 这是一种很好的做法。你不能懒惰,让JS引擎为你定义最高范围的变量。

要解决此问题,请使用use strict

Working example

另请注意,我修正了错字:var应为var $oThis = this;