1柠偶、this的默認(rèn)綁定(this == window)
function foo(){
console.log(this == window)//true
}
foo();
2别伏、new綁定:this指代將來創(chuàng)建的那個(gè)對(duì)象
function Person(){
this.name = "李四";
console.log(this)//this指代p
}
var p = new Person();
3吐根、隱式綁定:對(duì)象.方法()
var p = {
name : "abc",
foo : function (){
console.log(this.name);//this指代p
}
}
p.foo();
//----------------------
var name = "李四";
function foo(){
console.log(this.name);
}
var p = {
name : "abc",
foo : foo
}
p.foo();// abc
foo(); // "李四"
//------------
var p = {
name : "abc",
foo : function (){
console.log(this.name);
}
}
var f = p.foo;
var name = "李四";
f(); // 李四
//---------------
var p = {
name : "李四",
inner : {
name : "張三",
foo : function (){
console.log(this.name);
}
}
}
var name = "王五";
p.inner.foo();//張三
4请梢、顯式綁定
主要分為call赠尾、apply以及bind
優(yōu)先級(jí):顯式綁定優(yōu)先級(jí)最高(大于隱式、默認(rèn)及new綁定)溢陪,且bind優(yōu)先級(jí)大于call和apply
var name = "a"
function foo(){
console.log(this.name);
}
//永遠(yuǎn)綁定this萍虽,返回值就是綁定成功的那個(gè)函數(shù)。 對(duì)原來的函數(shù)沒有任何的影響
var foo1 = foo.bind({name : "b"})
foo1() // b
foo1.call({name : "c"}) // b
a形真、顯式綁定時(shí)杉编,如果傳入的是null, undefined的時(shí)候this的綁定丟失問題咆霜!this變成window
b邓馒、如果傳入的是基本類型如數(shù)值,則返回undefined蛾坯,因?yàn)橄喈?dāng)于new Number(數(shù)值)--萬物皆對(duì)象
c光酣、ES6對(duì)顯式綁定做了一個(gè)新的 擴(kuò)展。
var 返回的對(duì)象 = 對(duì)象.bind(要綁定的對(duì)象)