简单了解下 JS 的 this 绑定

139 阅读1分钟

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》(上卷)