jQuery $(this)是" undefined"在nodejs模块上(使用Browserify)

时间:2016-12-21 18:02:38

标签: javascript jquery node.js ecmascript-6 browserify

我创建了以下NodeJs模块:

import $ from 'jquery';

module.exports = () => {

  $("#clients-table tbody tr").click(() => {

    let $this = $(this);

    console.log($this);
    console.log($(this));
    console.log($(this).attr("class"));
    console.log($("#clients-table tbody tr").attr("class"));
    console.log("end");
  });
}

我的Browserify入口点如下所示:

"use strict";

import $ from 'jquery';
import test from './test';

test();

当我点击该元素时,会触发点击事件,但$(this)undefined。 这是不同console.logs

的结果
test.js:9 he.fn.init {}
test.js:10 he.fn.init {}
test.js:11 undefined
test.js:12 test
test.js:13 end

知道为什么吗?

2 个答案:

答案 0 :(得分:2)

Arrow functions not 绑定自己的this参数 - 这就是为什么你得到undefined - 所以你可以使用正常的函数模式:

$("#clients-table tbody tr").click(function() {

    let $this = $(this);

    console.log($this);
    console.log($(this));
    console.log($(this).attr("class"));
    console.log($("#clients-table tbody tr").attr("class"));
    console.log("end");
  });

答案 1 :(得分:2)

另一个答案可能是更现实的答案,但要注意,您也可以停止使用this并执行

$("#clients-table tbody tr").click(evt => {
    let $this = $(evt.currentTarget);

    // ...
});