美文网首页
this详解

this详解

作者: Ivy_study | 来源:发表于2019-02-28 15:17 被阅读0次

强调点:

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值不能被绑定,只属于外层(函数或全局)作用域

相关文章

网友评论

      本文标题:this详解

      本文链接:https://www.haomeiwen.com/subject/ooiqmftx.html