动态绑定
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四条绑定划定规矩的优先级
优先级最高的是new绑定,new中挪用函数,this绑定到新创建的对象中。
其次的是call,apply中显性传入要绑定的对象。
函数是不是在某个高低对象中挪用,假如是,this绑定的是高低文对象
假如都不是,函数在全局对象实行,则绑定到全局对象中,在严厉形式下,就绑定到undefined。