js的this對象相關

 1 var scope = 'globe'
 2 function log() {
 3     // console.log(this)
 4     let arg  = Array.prototype.join.call(arguments, ', ');
 5     console.log(`${this.scope}: ${arg}`);
 6 }
 7 let obj = {
 8     scope: 'own',
 9     lop: function() {
10         let scope = 'scope';
11         log('low')
12     }
13 }
14 obj.lop(); // globe: low
15 obj.lop.call(obj); // globe: low
16 log.call(obj, 'create') // own: create

若是把var scope= ‘globe’ 爲 let scope = ‘globe’,結果就是node

obj.lop(); // undefined: low
obj.lop.call(obj); // undefined: low
log.call(obj, 'create') // own: create
 
這裏分析一下:
  1. log不是做爲對象的方法調用的,因此this指向全局對象wondow(這裏不考慮nodejs),因此obj.lop()與obj.lop.call(obj)的結果是同樣的
  2. 使用var聲明scope時,它會被掛在window上,因此使用this能夠取到,可是,使用let時,文件至關於一個模塊,有局部做用域,scope就不掛在window上了。
  3. log.call(obj, 'create')使用call綁定this值,因此this指向obj

PS: 綁定this方法: call 參數是分開的,apply 參數是數組,bind 綁定this後修改this就沒有做用了。數組

相關文章
相關標籤/搜索