js中的this引用的是函数据以执行的环境对象,而js教程中所说的环境对象分为全局环境和函数所定义的局部环境,那么以下代码中
var color = 'red';
function showColor() {
console.log(this.color);
}
showColor(); // 'red',因为this指向window
var o = {
color: 'blue'
};
o.showColor = showColor;
o.showColor(); // 'blue' ????这里的this指向的是o?o也可以构成一个执行环境?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
“js中的this引用的是函数据以执行的环境对象”这句话拓展一下:
js中的this有四种调用模式:
1.方法调用模式:当一个函数被保存为一个对象的属性,这个方法被调用时,this指向该对象。[此题应该是作为对象的方法调用的]
2.函数调用模式:当一个函数直接被调用(不是作为一个对象的方法被调用)。[我想你是把第一种和这种搞混了]
(剩下两种参照《JavaScript语言精髓》这本书吧^_^)
3.构造器调用模式:
4.apply调用模式:
有一个不变的道理,什么对象调用了showColor,那么this便指向那个对象。
JS中的this,大体有以下几种取值:
全局范围
全局范围使用this指向的是全局变量,浏览器环境下就是window。
注:strict模式不存在全局变量,这里的this是undefined。
函数调用
函数调用中的this也指向全局变量。
注:strict模式不存在全局变量,这里的this是undefined。
对象方法调用
对象方法调用中,this指向调用者。
不过由于this的晚绑定特性,在上例的情况中this将指向全局变量,相当于直接调用函数。
这点非常重要,同样的代码段,只有在运行时才能确定this指向。
构造函数
在构造函数内部,this指向新创建的对象。
显式设置this
使用Function.prototype的call或者apply方法时,函数内部this会被设置为传入的第一个参数。
如果使用面向对象的思路来理解的话。
第一个调用
showColor()中的this指向的是window是因为,在全局环境中调用
showColor就相当于window.showColor()。这个全局对象
windows有自己的成员color和showColor方法类似
类推应该不难理解了。