const obj = {
value: 1,
hello: function() {
console.log(this.value)
},
inner: {
value: 2,
hello: function() {
console.log(this.value)
}
}
}
const obj2 = obj.inner
const hello = obj.inner.hello
obj.inner.hello() // ??
obj2.hello() // ??
hello() // ??
-
將
obj.inner.hello()
轉為 call 的形式變成obj.inner.hello.call(obj.inner)
,
此時 this 就是obj.inner
,所以呼叫hello()
就會印出obj.inner.value
的值,所以這邊是印出2
。 -
將
obj2.hello()
轉為 call 的形式變成obj2.hello.call(obj2)
,又obj2 = obj.inner
,所以跟第一點一樣 this 就是obj.inner
,所以呼叫hello()
就會印出obj.inner.value
的值,所以這邊還是印出2
。 -
將
hello()
轉為 call 的形式變成hello.call()
,這時找不到this.value
的值,所以印出undefined
依序印出:
2
2
undefined