如何使用“严格使用”;不修改我的实用程序对象的作用域
How to use "use strict" without modifying the scope of my utilities objects?
我正在使用几个全局实用程序对象,如:
var StringUtils = {
// ...
equalsIgnoreCase: function(string1, string2) {
return string1.toUpperCase() === string2.toUpperCase();
}
// ...
};
在这种情况下如何使用"use strict"
?我尝试了以下方法:
(function() {
"use strict";
var StringUtils = {
// ...
equalsIgnoreCase: function(string1, string2) {
return string1.toUpperCase() === string2.toUpperCase();
}
// ...
};
})();
但是您可以想象,StringUtils
在其作用域之外不再可用。
当你在IIFE中定义对象时,它将是该IIFE的本地对象。
有两个选项
1)就像下面说的,
"use strict";
var StringUtils = {
equalsIgnoreCase: function(string1, string2) {
return string1.toUpperCase() === string2.toUpperCase();
}
};
或
2)定义如下,如果你想使用IIFE
window.StringUtils = {};
如果您使用的是nodejs
,这将是
global.StringUtils = {};
由于EMCAScript5说如何实现它,您的选择是有限的。
你可以遍历所有的函数块,除了那些你想要全局的和添加'use strict'的。这可能很乏味,但可以确保只有你想要的代码块是严格的。虽然当使用JS lint
时会抛出'错误'您可以将代码分成不同的文件,并在每个文件中指定哪些是严格的,哪些不是
最后,你可以把所有的"全局"函数放在脚本的顶部,然后在它们下面添加"use strict"语句;
这三个方法都允许你从严格块中访问非严格对象。
就你的代码块而言,建议将整个js文件包装在一个函数中;这有助于向后兼容,同时在整个文件中强制使用strict:
(function () {
'use strict';
// window.StringUtils = {
// GLOBAL.StringUtils = {
var StringUtils = {
// ...
equalsIgnoreCase: function(string1, string2) {
return string1.toUpperCase() === string2.toUpperCase();
}
// ...
};
// add the rest of your code here
}());
相关文章:
- 我的剧本赢了'不能在IE中工作(甚至9)?修改复制文本的简单javascript
- 是否可以稍微修改我的对称差分函数,使其可以接受未知数量的参数
- 有没有一种方法可以使用gull来修改我的index.thml,以防止CSS缓存
- 需要帮助修改我的jQuery插件
- 我如何修改它以使用数组中的所有项目
- 如何修改我的 jQuery 以更新以不同方式激活的切换按钮上的 html
- 为什么JavaScript不修改我的变量
- Javascript:如何修改我的代码以在主题发布后添加回消失的占位符
- 我如何修改这个JavaScript正则表达式来检查字符串是否是一个最多必须有2个十进制数字的数字
- 我可以't使我的线条粗细对修改后的输入做出正确响应
- 在滚动时交换我的徽标图像(修改现有脚本)
- 为什么获胜't我的JS修改了这个html
- 修改我的单选输入按钮的文本
- Mozilla和IE修改了我的下拉列表,但chrome没有;t
- 我如何修改我的mentionify扩展以忽略已经'mentionify'-ed元素
- 我如何修改这个谷歌脚本以从谷歌表单的E列中提取电子邮件
- 我修改了我的PHP代码,但是浏览器中显示的结果没有改变.是否有某种“缓存”?PHP中的错误
- 如何使用“严格使用”;不修改我的实用程序对象的作用域
- 如何修改我的函数以默认隐藏消息正文并在单击时显示正文?
- 未知node.js和websockets服务器停止.谁修改了我的代码