this详解

2019-02-28  本文已影响0人  Ivy_study

强调点:

this在任何情况下都不指向函数的词法作用域;
this的指向是在函数调用时确定的而不是在函数声明时确定的

this绑定规则(优先级由低到高)

1、默认绑定

函数调用类型: 独立函数调用

function foo() {
  console.log(this);
}

foo(); // global window...
2、隐式绑定

函数调用类型:obj.foo()

function foo() {
  console.log(this);
}

var obj = {
  foo: foo
}

obj.foo();

但是在隐式绑定中存在着隐式丢失绑定对象的情况

一种情况 
function foo() {console.log(this);}
 var obj = {foo: foo}
 var bar = obj.foo // 函数别名
 bar()  //调用位置在全局作用域下,为默认绑定 

另一种情况:函数作为参数传入时
function foo() {console.log(this);}
function doFoo(fn) {
  // fn其实引用的是foo
  fn(); // <--调用位置
}
var obj ={foo: foo}
doFoo(obj.foo);
3、显式绑定

call、apply、bind

4、new 绑定
var p = new Person();

var obj = {};   // 创建一个全新的对象
obj.__proto__ = Person.prototype;  // 这个新对象会被执行[[prototype]]连接
Person.call(obj);  // 这个新对象会绑定到函数的this
return obj; // 返回这个新对象
es6箭头函数中的this值不能被绑定,只属于外层(函数或全局)作用域
上一篇 下一篇

猜你喜欢

热点阅读