JavaScript中this指向问题
首先在JavaScript中this中表示的是当前函数执行时的当前对象,其实可以理解成当前function执行时是在哪个对象哪里执行的。 当没有明确的表明执行对象的时候,this是指向全局对象window,而在Node是global
我们通过题目去了解关于this(本文讲的都是不在严格模下的this指向)
题目一
var someone={ name:'Bob', showName:function () { alert(this.name) } }; var other={ name:'Tom', showName:someone.showName //其实这里没有执行function,只是相当于把showName复制
};
other.showName();//Tom
题目二
var name='window';
var someone={
name:'Bob',
showName:function () {
alert(this.name)
}
};
var other={
name:'Tom',
showName:someone.showName
};
var show=someone.showName; 因为当前声明的show是一个全局变量,所以this指向的是window
show();//window,可以可以看成是window.show();
题目三
var name='window';
var someone={
name:'Bob',
showName:function () {
alert(this.name)
}
};
var other={
name:'Tom',
showName:function () {
var fun=someone.showName;//因为这里的fun没有绑定任何的执行对象,所以默认指向window
fun();
}
};
other.showName();//window
在浏览器中setTimeout、setlnterval和匿名函数执行时都是指向当前全局对象window
题目四
var name='bob';
var nameObj={
name:'Tom',
showName:function () {
alert(this.name)
},
waitShowName:function () {
! function (__callback) {
console.log(__callback)
__callback();
}(this.showName)
}
};
nameObj.waitShowName(); //bob
eval相当于在该区域填入代码,用法 eval(string)
var Bon={ name:'bob', showName:function () { eavl('alert(this.name)') } }; Bon.showName();
那么问题来了,假如有时候我们需要改变函数执行时的对象,把this指向其他对象,那么应该怎么做呢?
使用apply()、call();
var name='window'; var someone={ name:'bob', showName:function () { alert(this.name); } }; var other={ name:'tom' }; someone.showName.apply();//window someone.showName.apply(other);//tom
其他之间有什么区别?
只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。



浙公网安备 33010602011771号