为什么在函数中使用`this`会给我一个"可能的严格违规"在jshint?

时间:2014-04-18 03:32:47

标签: javascript this jshint

假设我有一个函数,我想将其重新用作一对对象的方法,以便向这些对象添加数据。

function addToObject(data) {
  for (var d in data) {
    if (data.hasOwnProperty(d)) {
      this[d] = data[d];
    }
  }
}

myObjOne = {
  add: addToObject
};

myObjTwo = {
  add: addToObject
};

我的目标是能够调用myObjOne.add(myData),其中myData是我要添加到myObjOne的对象,并且能够在myObjTwo上复制此功能}。

我的问题是在this中使用addToObject给了我:

this[d] = data[d];
^ Possible strict violation.

在jshint中。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

文档说警告发生在:

  

您在非构造函数中使用this。如果在调用构造函数时忘记使用new关键字,this将在非严格模式下意外绑定到全局对象,但在严格模式下将未定义。

在编译指示评论中使用validethis:true

function addToObject(data) {
    'use strict';
    var d;
    for (d in data) {
        if (data.hasOwnProperty(d)) {
            /* jshint: validthis:true */
            this[d] = data[d];
        }
    }
}

<强>参考