Javascript 如何将窗口和文档对象传递到require模块?
我想在我的require模块中为Javascript 如何将窗口和文档对象传递到require模块?,javascript,requirejs,Javascript,Requirejs,我想在我的require模块中为窗口和文档对象添加别名(用于速度和健全性检查) 例如,我想写: define([`jQuery`, `window`, `document`], function($, window, document, undefined) { var element = document.getElementByClassName("test"); // more code here }); 传入窗口和文档是JS模块中常见的良好实践(这里有很好的解释:) 如
窗口
和文档
对象添加别名(用于速度和健全性检查)
例如,我想写:
define([`jQuery`, `window`, `document`], function($, window, document, undefined) {
var element = document.getElementByClassName("test");
// more code here
});
传入窗口
和文档
是JS模块中常见的良好实践(这里有很好的解释:)
如何将窗口
和文档
传递到所需模块?在我的require.config.path
对象中有什么我可以做的吗
我似乎在网上找不到任何能告诉我怎么做的资源
谢谢 这是一篇关于生活的非常好的文章。但我没有看到传递文档和窗口对象的任何意义,也没有看到任何好处。这些在你的项目中随处可见,不需要通过。他拿了一些窗户和文件,只是为了举例说明
如果我错了,请纠正我。打开以进行更正。您需要定义一个模块来导出它们中的每一个-
窗口
,文档
和未定义
因此,在window.js
文件中,您可以:
define(function(){
// that's the actual `window` global object
return window;
});
然后,您引用它,就像您对任何其他模块所做的那样:
define(['jQuery', 'window'], function($, window) {
// ...
});
做同样的事情来涵盖你需要的所有其他事情
但是,我不建议您继续应用此方法。有
undefined
是函数范围中的一个变量,而不是全局对象属性,minifies可以将其减少为一个字母(从而获得更好的压缩率)
但是,如果仅使用缩小,则该选项有效。如果您使用minification+gzip服务于您的生产脚本(就像您应该做的那样!),那么这种方法是不相关的。Gzip使用LZ77算法,用引用替换重复出现的数据。因此,它将捕获并压缩所有窗口
或文档
或未定义
或任何其他相关事件,这样您就安全了undefined
是不带写保护的全局对象的属性。因此,它可能被覆盖,导致奇怪和意外的行为
但是,对于ES5,全局属性undefined
、NaN
和Infinity
变为只读。因此,随着它在所有现代浏览器中的普遍采用——当然,IE9除外——覆盖这些值已不再可能
另外,通过ES6,我们有了更好的解决方案。如果我们暂停某人正在修改全局变量,您可以使用代理调试(跟踪)任何和每个属性访问或设置事件,并使用handler.get
或handler.set
陷阱第一个好处是速度。如果我可以使用window的本地副本,那么当我编写
If(typeof x==“undefined”)
时,我可以对照本地window对象的undefined属性检查x
的类型,而不是遍历DOM树以到达全局窗口。另一个原因是出于安全考虑。返回if(typeof x==“undefined”)
示例:由于窗口对象是可变的,其他代码可以更改窗口的undefined属性的值。如果发生这种情况,typeof x
将不等于undefined-->而是等于其他代码设置的值。这可能会导致代码中出现错误。但这并不能回答问题。