我可以在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