akk*_*ore 34 javascript cross-browser
我可以在javascript中向'window'对象添加任何随机属性吗?就像是:
window.my_own_attr = "my_value"
Run Code Online (Sandbox Code Playgroud)
它对任何图书馆都有副作用吗?它是跨浏览器兼容的吗?
Jam*_*ice 53
我可以在javascript中向'window'对象添加任何随机属性吗?
是的,就像你已经表现出来的那样.
它对任何图书馆都有副作用吗?
不,除非您使用设置属性的库然后覆盖.
它是跨浏览器兼容的吗?
是的,完全.
话虽如此,这种做法通常是不受欢迎的.你最终可能会覆盖你不想要的东西.
在所有浏览器中,window都是javascript全局命名空间.每个属性或方法都"存在"该命名空间中.因此,如果您将属性分配给window,则它实际上是一个全局变量.
例:
window.myConstant = 5;
function multiply(val){
return myConstant * (val || 1);
}
multiply(10); //=> 50
multiply(); //=> 5
Run Code Online (Sandbox Code Playgroud)
你必须谨慎使用javascript框架.例如,如果您声明window.JQuery并使用JQuery框架,则JQuery命名空间将被您的赋值替换,使其无用.
是的,您可以,但一般来说您不应该这样做。
该window对象也是 JS 默认的“全局”对象,因此所有全局变量都添加到那里。
除非您覆盖已经存在的属性,否则不太可能破坏任何内容,但将变量转储window或以其他方式创建大量全局变量被认为是不好的做法。
小智 5
我不会重复其他人所说的:这种做法的老套性。但当使用像 Angular 这样的严格框架与普通 HTML / JS(或 jQuery)代码混合时,它会非常有用。这也是很hacky和不受欢迎的,但有时有充分的理由,比如如果你有很多预先存在的JS代码,将很难集成到框架中。
对我来说更有趣的问题是如何利用向全局window对象添加属性的能力。当我想要将 Angular 提供程序(服务)的方法公开给代码时,我会使用一种模式,否则这些代码将无法注入服务,可能是因为它在 Angular DI 框架之外运行。我的做法如下:
window['MyServiceName'] = this假设您已将提供程序设计为遵循单例模式,那么现在可以从任何地方安全地调用您的提供程序的方法。非 Angular 脚本只需调用window['MyServiceName'].methodName()
| 归档时间: |
|
| 查看次数: |
35920 次 |
| 最近记录: |