console 第一个的时候 val乘等于2 一直感觉是4 怎么会是8呢 我不理解这个? 有人能给解答一下嘛?
这个问题很好,考验的是上下文。你看下面这张图,如果什么都不计算,只打印的话,也会发现打印的是2,不是obj中的4
原因在于下面这句代码,这里的func其实已经跟obj这个对象没有关系,这句话先相当于给window注册了一个func方法。
而面向对象语言中 this 表示当前对象的一个引用。但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。
所以这个时候执行环境变成了window,所以val变成了2
var func = obj.dbl
window.val = 2;
var obj = {
val: 4,
dbl: function () {
this.val *= 2;
val *= 2;
// 看这里的输出
console.log('this : ' + this);
console.log('val : ' + val);
console.log('this.val : ' + this.val);
}
}
var func = obj.dbl;
func();
如果要达到你想要的效果,需要修改一下代码
window.val = 2;
var obj = {
val: 4,
dbl: function () {
this.val *= 2;
val *= 2;
// 看这里的输出
console.log('this : ' + this);
console.log('val : ' + val);
console.log('this.val : ' + this.val);
}
}
var func = obj.dbl;
func.call(obj);