2012-11-19 102 views
0

不工作下列程序打印效果與預期文件撰寫貯藏在JavaScript

var print = function(t){ 
    document.write(t); 
}; 

var printAlias = print; 

printAlias("Hello world"); 

但是當我使用相同的技術與文件撰寫這是行不通的「Hello world」。

var write = document.write ; 
write("Something); 

誰能告訴我,我錯過了什麼?

回答

2

它不起作用,因爲您在documentwrite方法中丟失了上下文(「this」值)。您可以調用writecall method把它找回來:

write.call(document, "Something"); 

在你只是包裹在另一個函數調用document.write你的第一個例子,但電話本身不斷的背景下,因爲你調用write作爲的方法document

因此,如果您的目標代碼較短,您可以堅持常用或包裝函數!或(感謝@Esailija),你可以在時間bind背景下document您創建write變量:

var write = document.write.bind(document); 
+0

他還不如'VAR寫= document.write.bind(文件)''以來write.call '在舊版IE中不支持 – Esailija

+0

@Esailija - 是的。我不知道它在舊版IE中不被支持。那個版本修復了哪個版本? –

+0

好的。所以write方法在裏面的某個地方使用「this」,並且期望「this」是文檔。我對嗎? – Tanmoy