var foo = function(){
console.log(this)
};
// 如果一个函数,是直接调用,与任何对象都没有关系时,这个调用,就是函数调用
// 函数调用模式中:this指的就是window
foo(); // window
var obj = {
foo:function(){ console.log(this)
}
}
// 如果一个函数,是作为某个对象一个方法调用的(与某象相关联),那么这种调用,就属于方法调用
// 方法调用模式中:this就指向了当前调用的对象
obj.foo(); // obj
var Person = function(){
this.foo = function(){
console.log(this);
}
};
// 如果一个函数是配合new运算符,来使用的,那么该种就属于,构造函数调用
// 构造函数调用模式中:this指向new创建出来的新对象
var p = new Person();
p.foo(); // p
call/apply/bind 可以动态改变this的指向
var x = 100;
function fun(){
console.log(this.x);
}
var obj = {};
obj.x = 200;
obj.fun = fun;
// 上下文调用模式中:this指向第一个参数,如果为空指向window
obj.fun.apply(); // 100 100是window中的x,说明this指向window
obj.fun.apply(obj); // 200 200是obj中的x,说明this指向的是obj对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |