被議論難了的this關鍵字

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綁定對象.
觸及的要領有callapplybind.

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
    原文作者:lea_
    原文地址: https://segmentfault.com/a/1190000015441817
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞