
隐式绑定
关于this,一般来说,谁调用了办法,该办法的this就指向谁,如:
- function foo(){
- console.log(this.a)
- }
- var a = 3;
- var obj = {
- a: 2,
- foo: foo
- };
- obj.foo(); // 输出2,因为是obj调用的foo,所以foo的this指向了obj,而obj.a = 2
如不雅存在多次调用,对象属性引用链只有上一层或者说最后一层在调用地位中起感化,如:
隐式绑定和显式绑定哪个优先级更高?我们来测试一下:
- function foo() {
- console.log( this.a )
- }
- var obj2 = {
- a: 42,
- foo: foo
- }
- var obj1 = {
- a: 2,
- obj2: obj2
- }
- obj1.obj2.foo(); // 42
隐式损掉
一个最常见的this绑定问题就是被隐式绑定的函数会损掉绑定对象,也就是说他回应用默认绑定,大年夜而把this绑定到全局对象或者undefined上,取决于是否是严格模式。
- function foo() {
- console.log( this.a )
- }
- var obj1 = {
- a: 2,
- foo: foo
- }
- var bar = obj1.foo; // 函数别号!
- var a = "oops, global"; // a是全局对象的属性
- bar(); // "oops, global"
- function foo(something){
- this.a = something
- }
- var obj1 = {}
- var bar = foo.bind(obj1);
- bar(2);
- console.log(obj1.a); // 2
- var baz = new bar(3);
- console.log(obj1.a); // 2
- console.log(baz.a); // 3
固然bar是obj.foo的一个引用,然则实际上,它引用的是foo函数本身,是以此时的bar()其实是一个不带任何润饰的函数调用,是以应用了默认绑定
一个更奥妙、更常见并且更出乎料想的情况产生在传入回调函数时:

网友点评
精彩导读
科技快报
品牌展示