JavaScript this简明笔记

动态绑定

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

  • this是在运行时候进行绑定的,,并非编写的时候绑定的。函数

  • this指向执行上下文,何为执行上下文,个人理解是函数在“哪里”执行的,这个记录会包含函数在哪里会被调用(调用栈),函数的调用方式,传入参数等信息。this就是这个记录的一个属性。最多见的执行上下文就是window,如this

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

很明显,foo函数在window这个“环境”下执行,因此this指向了window。(但在严格模式下,this不默认指向window,因此代码弹出undefined)code

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

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

JavaScript中能够控制this的绑定

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

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

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

使用new来调用foo()时。咱们会构造一个新对象并把它绑定到foo()调用中的this上。console

this四条绑定规则的优先级

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

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

  3. 函数是否在某个上下对象中调用,若是是,this绑定的是上下文对象

  4. 若是都不是,函数在全局对象执行,则绑定到全局对象中,在严格模式下,就绑定到undefined。

相关文章
相关标签/搜索