this 的四种绑定规则
默认绑定
独立函数调用,即直接使用不带任何修饰的函数引用进行调用。
一般指向全局对象。
var a = 6;
function foo() {
console.log(this.a);
}
foo(); // 6
隐式绑定
通过作为某个对象的属性调用。则 this 指向最近的对象。
function foo() {
console.log( this.a );
}
var obj = {
a: 2,
foo: foo
};
obj.foo(); // 2
显示绑定
通过 call(..) 和 apply(..) 来显示指定 this 绑定的对象。
new绑定
对 new 的理解
在 JavaScript 中,构造函数只是一些使用 new 操作符时被调用的函数。它们并不会属于某个类,也不会实例化一个类。实际上,它们甚至都不能说是一种特殊的函数类型,它们只是被 new 操作符调用的普通函数而已。
实际上并不存在所谓的“构造函数”,只有对于函数的“构造调用”。
function foo(a) {
this.a = a;
}
var bar = new foo(2);
console.log( bar.a ); // 2
使用 new 来调用 foo(..) 时,我们会构造一个新对象并把它绑定到 foo(..) 调用中的 this 上。
优先级
new绑定 > 显示绑定 > 隐式绑定 > 默认绑定
参考
《你不知道的JS》(上卷)