javascript中this指向问题
- this永远指向一个对象
- this的指向完全取决于函数调用的位置
需要注意的是在JavaScript中,一切皆对象,运行环境也是对象,所有函数都是在某个对象下运行,而this就是函数运行时所在的对象(环境)
原理
function fun(){
console.log(this.s);
}
var obj = {
s:'1',
f:fun
}
var s = '2';
//这里的obj.f(),是调用了obj对象中的f方法,所以运行环境在obj对象内,this指向obj对象
obj.f(); //1
//这里到的fun()函数的运行环境是在window对象环境运行,所以this指向window
fun(); //2
1、在函数中直接使用(window)
function get(content)
{
console.log(content);
}
get('你好');
//你要知道,get('你好')的完整写法应该是:
get(window,'你好')
2、当函数作为对象的方法被调用(谁调用我,我就指向谁)
var Person = {
name: '张三',
run: function(time) {
console.log(`${this.name}在跑步,最多${time}分钟就不行了`)
}
}
Person.run(30);
//相当与下面的写法
Person.run.call(Person, 30)
面试高频题
var name = 222;
var a = {
name: 111,
say: function() {
console.log(this.name)
}
}
var fun = a.say;
fun(); ///函数的直接调用--this指向window---222
a.say() //在对象中调用方法---this指向该对象a---111
var b = {
name: 333,
say: function(fun) {
fun() //函数的直接调用--this指向window
}
};
b.say(a.say); //a.say带入到b的fun中,fun()属于函数的直接调用.所以this指向window,this.name=222
b.say = a.say; //相当于把a.say复制到b.say中
b.say(); //在函数中直接调用--this指向对象b--this.name=333