先看一张规则图
判断时间是函数执行的时候
总结规则:
1.如果使用了new
语句,那么this
就指向新创建的对象。
function Person(){
this.age = 20;
this.sex = "man";
this.name = "xiaoq";
console.log(this);
}
var people = new Person(); //Object { age: 20, sex: "man", name: "xiaoq" }
2.如果使用了
call
或者
apply
方法,那么
this
指向
call
或者
apply
方法传入的对象。
var obj1 = {
name:"111"
}
var obj2 = {
name:"222"
}
function demo(){
console.log(this.name);
}
demo.apply(obj1);//"111"
demo.call(obj1);//"111"
demo.apply(obj2);//"222"
demo.apply(obj2);//"222"
3.谁调用了方法,该方法中的
this
就指向谁。
var name = "000";
var obj1 = {
name:"333",
say:function(){
console.log(this.name);
}
}
obj1.say();//333
var demo = obj1.say;
demo();//000
4.如果不符合以上规则,则
this
为默认值
window
。
function test(){
console.log(this);
}
test(); //window
最后附上一个很有难度的例题~~
我每次做都会出错
var name = "222";
var a = {
name:"111",
say:function(){
console.log(this.name);
}
}
var fun = a.say;
fun();
a.say();
var b = {
name:"333",
say:function(fun){
fun();
}
}
b.say(a.say);
b.say = a.say;
b.say();
答案:
222
111
222
333