问题
Say I have a function that I would like reuse as a method on a couple objects in order to add data to those objects.
function addToObject(data) {
for (var d in data) {
if (data.hasOwnProperty(d)) {
this[d] = data[d];
}
}
}
myObjOne = {
add: addToObject
};
myObjTwo = {
add: addToObject
};
My goal here was to be able to call myObjOne.add(myData) where myData is an object that I would like to add to myObjOne and be able to replicate this functionality on myObjTwo.
My issue is that using this within addToObject gives me:
this[d] = data[d];
^ Possible strict violation.
in jshint.
Why is this?
回答1:
The docs say the warning happens when:
you use
thisin a non-constructor function. If you forget to use thenewkeyword when calling a constructor function,thiswill be bound unexpectedly to the global object in non-strict mode, but will be undefined in strict mode.
Use validethis:true in a pragma comment:
function addToObject(data) {
'use strict';
var d;
for (d in data) {
if (data.hasOwnProperty(d)) {
/* jshint: validthis:true */
this[d] = data[d];
}
}
}
References
- JsHint Options: validthis
- The Strict Mode Restriction and Exceptions
来源:https://stackoverflow.com/questions/23146955/why-does-using-this-within-function-give-me-a-possible-strict-violation-in-j