iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
1

利用call來明白三問吧,在呼叫 function 以前是什麼東西,你就把它放到後面去
例如:obj.h()變成obj.h.call(obj),ero()變成ero.call()
1.

function ero(){
  console.log(this);
}
ero();

將ero()轉為ero.call(),裡面沒有東西所以是window

var obj = {
  value: 1,
  ero: function() {
    console.log(this.value);
  },
 h: {
    value: 2,
    ero: function() {
      console.log(this.value);
    }
  }
}

var obj2 = obj.h;
var h = obj.h.ero;
obj.ero();
obj.h.ero();
obj2.ero();
h();

將這些
obj.ero();
obj.h.ero();
obj2.ero();
h();
轉為
obj.ero.call(obj); 因為是obj對象所以是1
obj.h.ero.call(obj.h);因為是obj.h對象所以是2
obj2.ero.call(obj2);因為是obj2是來自obj.h對象所以是2
h.call();沒有東西所以是window

var x = 10
var obj = {
  x: 20,
  h: function() {
    var ero = function() {
      console.log(this.x);
    }
    ero();
  }
}

obj.h();

將obj.h()轉為obj.h.call(obj),但是裡面還有一個 function
所以再將ero()轉為ero.call()所以是指向window,所以是10


上一篇
DAY25-this三問
下一篇
DAY27-this總結
系列文
30天資料整理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言