Mai*_*tor 4 javascript scope map this
function myClass() {
this.nums = [1,2,3];
this.divisor = 2;
}
myClass.prototype.divideNumsByDivisor = function(){
return this.nums.map(function(num) {
return num*this.divisor;
});
}
Run Code Online (Sandbox Code Playgroud)
myClass.divideNumsByDivisor()被用来将它的成员变量上的每个数字乘以它的成员变量nums上的值divisor.
这不起作用,因为该函数function(num) { return num*this.divisor; }将此指向错误的对象.
根据MDN,第二个参数.map(fn, thisArg)是你希望在this调用回调函数时将ptr设置为什么,window如果你没有传递第二个参数,它将被设置为全局对象(例如).
所以,你可以让你的例子像这样工作:
function myClass() { this.nums = [1,2,3]; this.divisor = 2; }
myClass.prototype.divideNumsByDivisor = function(){
return this.nums.map(function(num) { return num*this.divisor; }, this);
}
Run Code Online (Sandbox Code Playgroud)