一.宰闰、概念
this是在運行時進行綁定的肩狂,不是在編寫時進行綁定见擦,取決于函數(shù)的調用方式
二钉汗、四條綁定規(guī)則
- 默認綁定
即獨立函數(shù)調用羹令,無法應用其他規(guī)則時使用此規(guī)則
function foo(){
"use strict"
console.log(this.a);
}
var a = 2;
foo() //嚴格模式下,this不指向window,否則指向window
- 隱式綁定
當函數(shù)引用有上下文對象時损痰,隱式綁定會把this綁定到該上下文對象福侈;
例如:
function foo(){
console.log(this.a);
}
var obj = {
a:42,
foo:foo
}
obj.foo()
注:對象屬性引用鏈中只有最后一層影響調用位置
例如:
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操作符>顯式>隱式>默認