this關鍵字
this是個經常運用的關鍵字,它被自動天生在函數作用域里.並代表函數實行環境的上下文.
如果在開闢中,不相識this綁定在誰人對象上,會很輕易湧現bug.
this綁定的劃定規矩
默許綁定
當函數自力運用,(沒有對象屬性的援用舉行挪用).
this會默許綁定在全局對象或undefined.
var log = function () {
console.log(this)
}
log() //window
運用嚴厲形式
"use strict";
var log = function () {
console.log(this)
}
log() //undefined
隱形綁定
當函數被某個對象的屬性援用后挪用.
this會綁定在該對象上.
var obj = {
log: function () {
console.log(this);
}
}
obj.log() //obj
顯性綁定
當函數挪用時,指定函數的this綁定對象.
觸及的要領有call、apply和bind.
var log = function () {
console.log(this)
}
var target = {}
var bindLog = log.bind(target)
bindLog() //target
log.call(target) //target
log.apply(target) //target
顯性綁定的優先級比隱形綁定高
function log() {
console.log(this.name)
}
var visibleObj = {
name: 'visible'
}
var hideObj = {
name: 'hide',
log: log
}
hideObj.log.call(visibleObj) //visible
new綁定
當實例一個組織函數時.
組織函數的this會綁定在實例上.
function construct(tag) {
this.tag = tag;
}
var instance = new construct('instance')
console.log(instance.tag) //instance