this四种调用模式及问题总结(广州中软卓越)
this关键字,本意:这个、这里的意思。在JavaScript中是指每一个方法或函数都会有一个this对象,this对象是方法(或函数)在执行时的那个环境,也可以说是这个函数在那个作用域下运行的。一共有四种调用模式:方法调用模式(对象属性模式)、函数调用模式(就是普通的函数执行)、构造调用模式(应该叫实例上的方法模式更好)和apply调用模式。今天中软卓越广州html5培训课程来讲讲this四种调用模式及问题总结。

1、直接调用模式
var foo = function(){
console.log(this)
};
// 如果一个函数,是直接调用,与任何对象都没有关系时,这个调用,就是函数调用
// 函数调用模式中:this指的就是window
foo(); // window
2、方法调用模式(对象内部)
var obj = {
foo:function(){ console.log(this)
}
}
// 如果一个函数,是作为某个对象一个方法调用的(与某象相关联),那么这种调用,就属于方法调用
// 方法调用模式中:this就指向了当前调用的对象
obj.foo(); // obj
3、构造函数调用模式
var Person = function(){
this.foo = function(){
console.log(this);
}
};
// 如果一个函数是配合new运算符,来使用的,那么该种就属于,构造函数调用
// 构造函数调用模式中:this指向new创建出来的新对象
var p = new Person();
p.foo(); // p
4、上下文调用模式,也称借用方法
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对象
5、this的问题的总结
遇到this指向问题时,先看有没有call、apply、bind
如果有,那么this指向 call、apply、bind 中第一个参数
如果没有,分析this所处的函数,究竟属于那种函数:
① 普通函数:this指向 window
② 对象内部方法:this指向对象
③ 构造函数:this指向该构造函数实例出来的新对象
关于JS中的this四种调用模式及问题总结已经讲解完毕了。去企业,学习企业需要的编程技能!广州中软卓越html5培训,真实企业背景,送你企业入场券!
广州中软卓越课程:http://gzetc.com.cn/