在以下对象中,我使用'这个'参考:
function SampleObject(){
this.addObject = function(object){...}
...
// more code here
...
this.addNewObjects= function(arr){
arr.forEach( function (obj) {
this.addObject(new Obj(obj.prop1, obj.prop2));
});
}
}
我假设情境正在发生变化,而且这个'指的是迭代的对象,而不是“样本对象”。我已经使用正常的for循环解决了这个问题,但是,我想知道为什么这不起作用,并且想知道是否有其他方法可以做到这一点。
答案 0 :(得分:57)
您可以将其存储在变量中:
var self = this;
this.addNewObjects = function(arr){
arr.forEach(function(obj) {
self.addObject(new Obj(obj.prop1, obj.prop2));
});
}
或使用bind:
this.addNewObjects = function(arr) {
arr.forEach(function(obj) {
this.addObject(new Obj(obj.prop1, obj.prop2));
}.bind(this));
}
并注意,没有那些this
将是窗口对象而不是obj。 This
始终是使用new关键字或window对象创建的对象(如果它是正常函数)。在严格模式下,this
在这种情况下将是未定义的。
更新:使用ES6,您可以使用箭头功能:
this.addNewObjects = function(arr) {
arr.forEach((obj) => {
this.addObject(new Obj(obj.prop1, obj.prop2));
});
}
箭头功能没有自己的this
,而是从外部范围获取。
UPDATE2 :来自@ viery365评论你可以使用它作为forEach的第二个参数,它将为该函数创建上下文:
this.addNewObjects = function(arr) {
arr.forEach(function(obj) {
this.addObject(new Obj(obj.prop1, obj.prop2));
}, this);
}
您可以在MDN forEach page
上阅读此内容答案 1 :(得分:0)
const array1 = [
{name : "john", age: 20}, {name : "sarah", age: 70}
];
array1.forEach(element => this.print(element));
print = (data) =>
{
console.log(data.name);
}
// expected output: "john"
// expected output: "sarah"
有更好的方法
array.forEach(obj => this.functionName(params));