Javascript 为什么在函数中使用'this'会给我一个'quot;可能的严格违反”;在jshint中?
假设我有一个函数,我想在一对对象上作为方法重用,以便向这些对象添加数据Javascript 为什么在函数中使用'this'会给我一个'quot;可能的严格违反”;在jshint中?,javascript,this,jshint,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
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
的对象,并且能够在myObjOne
上复制此功能
我的问题是,在addToObject
中使用this
会让我:
this[d] = data[d];
^ Possible strict violation.
在jshint中
为什么会这样?医生说,警告发生在: 在非构造函数中使用
此
。如果在调用构造函数时忘记使用new
关键字,此
将在非严格模式下意外绑定到全局对象,但在严格模式下未定义
在pragma注释中使用validethis:true
:
function addToObject(data) {
'use strict';
var d;
for (d in data) {
if (data.hasOwnProperty(d)) {
/* jshint: validthis:true */
this[d] = data[d];
}
}
}
参考资料
addToObject()
(适当地设置this
),就没有严格的违规行为。很高兴知道。有没有办法抑制这个警告?我相信jsHint
有办法禁用这个警告。啊哈,但是这个警告是什么意思呢?文档说警告发生在:你在非构造函数中使用它时。如果在调用构造函数时忘记使用new
关键字,此
将意外绑定到中的全局对象,但在严格模式下将是未定义的
。