我可以在javascript中爲'window'對象添加任何隨機屬性嗎?有些是這樣的:我可以在javascript中爲'window'對象添加屬性嗎?
window.my_own_attr = "my_value"
它是否對任何庫有任何副作用?它是跨瀏覽器兼容?
我可以在javascript中爲'window'對象添加任何隨機屬性嗎?有些是這樣的:我可以在javascript中爲'window'對象添加屬性嗎?
window.my_own_attr = "my_value"
它是否對任何庫有任何副作用?它是跨瀏覽器兼容?
我可以在javascript中爲'window'對象添加任何隨機屬性嗎?
是的,就像你所示。
它是否對任何庫有任何副作用?
不,除非您使用設置屬性的庫然後覆蓋。
它是跨瀏覽器兼容嗎?
是的,完全。
說了這麼一句,這種做法一般是不被接受的。你最終可能會覆蓋你不想要的東西。
是的,你可以,但一般你不應該。
window
對象也是JS默認的「全局」對象,因此所有全局變量都被添加到那裏。
除非覆蓋已經存在的屬性,否則不可能破壞任何內容,但在window
上轉儲變量或以其他方式創建大量全局變量被認爲是不好的做法。
在所有瀏覽器, window
是javascript全局命名空間。每個屬性或方法都「活在」該命名空間中。所以,如果你指定一個屬性window
,它是一個有效一個全局變量。
例如:
window.myConstant = 5;
function multiply(val){
return myConstant * (val || 1);
}
multiply(10); //=> 50
multiply(); //=> 5
你必須用JavaScript框架持謹慎態度。舉例來說,如果你聲明window.JQuery
,並使用JQuery
框架下,JQuery
命名空間將被你的任務所取代,使之無用。
在IE中,如果一個元素有一個id,則該節點是窗口對象作爲屬性上訪問:
<div id="num"></div>
alert(num); //Element
num = 3; //throws exception
var num = 3; //ok
我不會重複別人所說的話:t的黑客行爲他的做法。但是,當使用像Angular和vanilla HTML/JS(或jQuery)代碼這樣的僵化框架時,它會非常有用。這也是恥辱和皺眉,但有時也有很好的理由,如果你有很多預先存在的JS代碼,將很難融入框架。
對我而言,更有趣的問題是如何利用向全局window
對象添加屬性的功能。當我想要公開Angular提供者(服務)的方法來編寫代碼時使用的模式,否則將無法注入服務,可能是因爲它運行在Angular DI框架之外。我這樣做的方式如下:
window['MyServiceName'] = this
假設您設計了提供者以遵循單例模式,現在可以從任何地方安全地調用您的提供者的方法。一個非角度腳本需要簡單地調用window['MyServiceName'].methodName()
請參考:http://stackoverflow.com/questions/864942/,我不想改變'window.name',所以會使用一些怪異的名字,單獨爲我的應用程序。 – akkishore
好吧,似乎只有'window.name'保留在重新加載:( – akkishore
+1爲回答所有三個OP的問題提供了一個信息性的方式 – ddtpoison777