JavaScript this简明笔记

动态绑定

  • JavaScript的this并不“指向本身”。

  • this是在运行时刻举行绑定的,,并非编写的时刻绑定的。

  • this指向实行高低文,作甚实行高低文,我的明白是函数在“那里”实行的,这个纪录会包括函数在那里会被挪用(挪用栈),函数的挪用体式格局,传入参数等信息。this就是这个纪录的一个属性。最常见的实行高低文就是window,如

var a=2;
function foo(){
    alert(this.a);    //2
}
foo();

很明显,foo函数在window这个“环境”下实行,所以this指向了window。(但在严厉形式下,this不默许指向window,所以代码弹出undefined)

function foo(){
    alert(this.a);
}
var obj={
    a:2,
    foo:foo
}
obj.foo();           //2

函数foo在obj的环境下实行,this默许绑定到obj上。
以上两种都属于默许绑定。

JavaScript中能够掌握this的绑定

  • js中有call()和apply()能够显性的传入要绑定的对象

var obj={
    a:10
}
function foo(){
    alert(this.a);           
}
foo.call(obj);             // 10
  •  new绑定

function foo(a){
    this.a=a
}
var bar=new foo(20);
console.log(bar.a);         // 20

运用new来挪用foo()时。我们会组织一个新对象并把它绑定到foo()挪用中的this上。

this四条绑定划定规矩的优先级

  1. 优先级最高的是new绑定,new中挪用函数,this绑定到新创建的对象中。

  2. 其次的是call,apply中显性传入要绑定的对象。

  3. 函数是不是在某个高低对象中挪用,假如是,this绑定的是高低文对象

  4. 假如都不是,函数在全局对象实行,则绑定到全局对象中,在严厉形式下,就绑定到undefined。

    原文作者:kaiten
    原文地址: https://segmentfault.com/a/1190000005029312
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞