一、函数执行模式
function add() {
console.log(this);
}
add();
- 只要是函数执行模式,函数中的 this 指向 window
二、对象方法调用模式
function Add() {
this.show = function() {
console.log(this);
}
}
var a = new Add();
a.show(); // 对象调用自己的方法
- this 指向 a 对象;
- 所有的事件响应的方法都是对象方法调用模式(如 load,resize,click等所有事件)。
三、构造器调用模式
function Add() {
this.show = function() {
console.log(this);
}
}
var a = new Add();
- this 指向构造出来的对象 a
- 与前一种的区别,前一种是对象调用自己的方法,这是通过构造器调用。
四、Call 和 Apply 调用模式
function add(a, b) {
this.result = a + b;
}
var p = {}; // 定义一个空对象
add.call(p,3,6); // 在这个方法调用的时候,this 指向了p
console.log(p.result);
// apply 和 call 是同样的用法,只不过 apply第二个参数用数组进行传递。