1. this
和method
let user={
name: "Jason",
showName() { alert(this.name); }
}
alert(user.showName()); //Jason
定義在對象內(nèi)部的function术浪,我們稱作method瓢对。method往往需要access對象的其他property,往往是data
, 這個時候就需要this
關(guān)鍵字胰苏,在method內(nèi)部通過this.propertyName
來獲取硕蛹。
this
的其他用法:
this
的用法非常廣泛,它完全可以被應(yīng)用在任何函數(shù)的內(nèi)部,不僅僅限于method法焰,在C++或者其他一些語言中秧荆,this
和對象是捆綁的(bound),但在JS中不是這樣埃仪。this指向的對象由函數(shù)運行環(huán)境(execution context)決定乙濒。this
的維基介紹
2. 調(diào)用method的方式
有this信息的調(diào)用方式:
user.showName();
user["showName"]();
復(fù)雜的調(diào)用方式很有可能丟失了this信息,比如:
(method=user.showName)();
這是因為:dot operator .
返回的是Reference Type, 里面包含了(base,name, strict)
信息
base
is the object.
name
is the property.
strict
is true if use strict is in effect.
當(dāng)我們對Reference Type進一步做其他運算贵试,然后再()
琉兜,Reference Type轉(zhuǎn)換成了function,丟失了base/object
信息毙玻。
3. return this
實現(xiàn)chained method calls
let obj={
step: 0,
up() {
this.step++;
return this;
},
down() {
this.step--;
return this;
},
showStep() {
alert(this.step);
}
}
obj.up().down().up().showStep(); //1