利用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