PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
Ajax
[問題] bind自己
作者:
icydream
(巧虎)
2019-04-13 02:31:10
各位好:
以下程式碼:
var obj = {
foo: (function() {
return this;
}).bind(obj)
};
obj.foo(); //Window{...}
我的想法是,
foo已經有使用bind函式,
指定thisArg為obj物件,
所以,
foo函式回傳的this應該要是obj這個物件,
怎麼會變成Window?
煩請解惑,謝謝。
作者: mackliu (回不去的大叔)
2019-04-13 09:37:00
var obj = { foo: (()=> this).bind(obj)};obj.foo();你用匿名函數時,this指的是匿名函數自己,而不是obj使用箭頭函數的話..this 指的是定義時的obj詳情找一下javascript 的this用法..或者你在匿名函數前先最後一句先略過..有不同的做法,但要看狀況哦..丟臉了..不要理我...
作者:
brianwu1201
(bunny29)
2019-04-13 10:54:00
你 bind(obj) 時 obj 物件還沒被建立完成,所以()裡面的 obj 這時會是 undefined,當bind(undefined) this 會指向全域變數。
作者:
s25g5d4
(function(){})()
2019-04-13 12:50:00
這問題要從 variable hoisting 開始,在 compile phase obj 會先被初始化成 undefined,然後因為你在 assignmentexpression 計算完成之前就呼叫 .bind(),又因為 javascript 是 call by sharing 所以此時傳進 bind 的會是 undefined,即使後來 assignment 完成之後也不會影響傳進 .bind() 裡的 argument,所以實際上你等於呼叫了 .bind(undefined)
作者:
icydream
(巧虎)
2019-04-13 14:44:00
感謝各位回答
作者:
thethirdfoot
(第三隻腳)
2019-05-13 12:13:00
你可以加上嚴謹模式 跑出來的就會是undefinedbind執行的時候obj都還沒初始化 所以會變undefined但是沒有嚴謹模式他會自動導向Window
繼續閱讀
[問題] vue js做成一個專案後,語法該寫在哪?
ericerix
[問題] JavaScript會被什麼取代?
dharma
[問題] React Router 點選連結後的一般 js 無效
ymcheung
Re: [問題] 寫了Firefox腳本 但是onclick無法作用
eight0
[問題] 寫了Firefox腳本 但是onclick無法作用
orange0319
Re: [問題] js如何取得其他時區的時間?
taco2548
[ js ] GitHub 有趣專案介紹 + 推坑
w2sw2sw2s
[問題] 取得今天過了多久的timestamp
taco2548
[問題] 請教if敘述中的boolean判斷
hugct
[問題] vuejs build之後 html開啟內容是白的
ponwar87123
Links
booklink
Contact Us: admin [ a t ] ucptt.com