一.、概念
this是在運(yùn)行時進(jìn)行綁定的,不是在編寫時進(jìn)行綁定,取決于函數(shù)的調(diào)用方式
二、四條綁定規(guī)則
- 默認(rèn)綁定
即獨(dú)立函數(shù)調(diào)用,無法應(yīng)用其他規(guī)則時使用此規(guī)則
function foo(){
"use strict"
console.log(this.a);
}
var a = 2;
foo() //嚴(yán)格模式下,this不指向window,否則指向window
- 隱式綁定
當(dāng)函數(shù)引用有上下文對象時,隱式綁定會把this綁定到該上下文對象;
例如:
function foo(){
console.log(this.a);
}
var obj = {
a:42,
foo:foo
}
obj.foo()
注:對象屬性引用鏈中只有最后一層影響調(diào)用位置
例如:
function foo(){
console.log(this.a);
}
var obj = {
a:2,
foo:foo
}
var obj1 = {
a:22,
obj:obj
}
obj1.obj.foo() //2
2_1:隱式綁定丟失
function foo(){
console.log(this.a);
}
var obj = {
a:2,
foo:foo
}
var bar = obj.foo;
var a = "oops"
bar() //osps
3.顯式綁定
function foo(){
console.log(this.a)
}
var obj = {
a:2
}
var bar = function (){
foo.call(obj)
}
bar() //2
setTimeout(bar,100)//2
bar.call(window)//2
4.New操作符綁定
function Foo(){
this.name ="A"
}
var obj =new Foo()
console.log(obj.name);
三、綁定優(yōu)先級
new操作符>顯式>隱式>默認(rèn)