首页 > 代码库 > javascript中this的绑定

javascript中this的绑定

JavaScript中this有很多种绑定方式,最近学习过程中总结了一下,有默认绑定、隐式绑定、显示绑定、强制绑定、实例绑定。

接下来我们看看:

默认绑定:

代码如下:

function foo() {

  console.log( this.a );

}

var a = 3;

foo(); // 3

全局作用域下this默认指定到window,默认绑定即调用位置如何决定 this 的绑定对象。

 

隐式绑定:

function foo() {

  console.log( this.a );

}

var obj = { a: 3, foo: foo };

obj.foo(); // 3

隐式绑定容易丢失 比如

var bar=obj.foo;

bar();//undefined

调用位置是在window下 但是foo方法指定了obj作为它的绑定对象

显示绑定:

function foo() {

  console.log( this.a );

}

var obj = { a:3 };

foo.call( obj ); // 3

使用call我们调用foo的时候强制把this绑定在obj上

强制绑定:

function foo() {

  console.log( this.a );

}

var obj = { a:3};

var bar = function() {

  foo.call( obj );//强制绑定

};

bar(); // 3

setTimeout( bar, 100 ); // 3

// 强制绑定的 bar 不可能再修改它的 this

bar.call( window ); // 还是3

实例绑定:

JavaScript 也有一个 new 操作符

function foo(a) {

  this.a = a;

}

var bar = new foo(3);

console.log( bar.a ); // 3

 

javascript中this的绑定