在Javascript中,如果我們混疊的功能(或者,分配一個「參考到功能」到另一變量),如在:在Javascript中,只要被別名的函數不觸及「this」,函數別名是否正常工作?
f = g;
f = obj.display;
obj.f = foo;
3個上面的行的所有的,只要它們將工作右側的功能/方法不會觸及this
?既然我們傳遞了所有的參數,那麼它可能會搞砸的唯一方式是右邊的函數/方法使用this
?
其實第1行可能是好的,如果g
也是window
的屬性?如果g
引用obj.display
,那麼同樣的問題在那裏。
在第2行中,當觸摸obj.display
this
,它是指obj
,但是當被調用f
,將this
是window
,所以它們是不同的。
在第3行,它是相同的:當f
是obj
的代碼中調用,則this
是obj
,而foo
可能使用this
指window
如果是的window
的性質。 (全局功能)。
那麼第2行可以寫成
f = function() { obj.display.apply(obj, arguments) }
和線路3:
obj.f = function() { foo.apply(window, arguments) }
這是正確的方法?除此之外還有其他方法嗎?
這使我想到M.C.的錘子 – hobodave 2010-05-06 06:17:28
我知道。我試圖在原始問題中不提及這一點。 – 2010-05-06 06:19:23
恭喜,您剛剛發現我討厭Javascript中面向對象編程的原因。 由於缺少綁定函數,您總是需要關注上下文以及(因此)指出的內容。現在你可以繼續使用真正的OOP語言了(對不起:)。 – wump 2010-05-06 06:24:58