是否有JavaScript DEFINE 指令等效项
Is there a JavaScript DEFINE directive equivalent?
在一个php文件中,我有一个脚本,如这个片段:
<script>
$(function(){
$("#tabs_<?php echo $keyCode ?>").tabs();
var x = document.getElementById("bkhmode_<?php echo $keyCode ?>");
var mode = x.value;
setcont_<?php echo $keyCode ?>(mode);
});
</script>
我想将这段代码以及许多其他类似的行删除到一个单独的 JS 文件中以利用缓存,但我无法找到等效的 DEFINE 命令来允许我替换 php echo。
我想
DEFINE KEY_CODE = 'somevalue';
那么代码段将如下所示:
<script>
$(function(){
$("#tabs_KEY_CODE").tabs();
var x = document.getElementById("bkhmode_KEY_CODE");
var mode = x.value;
setcont_KEY_CODE(mode);
});
</script>
大多数语言都允许这样做,但我无法在 JavaScript 中找到任何等效的东西。 有什么建议吗?
您可以将变量设置为全局窗口命名空间,尽管这被认为是不好的做法,因为它会干扰其他程序,因此请小心。
window.KEY_CODE = 'somevalue';
$(function() {
$("#tabs_" + window.KEY_CODE); // Will escape local scope.
});
这应该有效,尽管通常的做法是使用 IIFE 执行此操作。
(function(window, document, $, undefined) {
$("#tabs_" + window.KEY_CODE); // Will escape local scope.
})(window, window.document, window.jQuery);
这有助于解决许多命名空间问题,因为它们是在本地范围内显式定义的。
您还可以使用全局变量来运行函数。如果您的函数是在 IIFE 外部声明的(即您刚刚在全局命名空间中运行它),它也会附加到 window 元素中。例如,这些是等效的。
function foo(a)
{
console.log("foo" + a);
}
foo("bar"); // prints "foobar"
window.foo("bar2"); // prints "foobar2"
window['foo']("bar3"); // prints "foobar3"
这是因为如果局部变量foo
未定义,浏览器将假定您正在调用window.foo
。 window['foo']
是相同的称呼window.foo
;它访问 window
对象,但使用字符串。因此,考虑到这一点,我们可以完成您的变量函数调用。
window.KEY_CODE = 'somevalue';
window.func_somevalue = function(a) {
console.log("somevalue = " + a);
};
window.func_othervalue = function(a) {
console.log("othervalue = " + a);
}
// prints "somevalue = Hello."
window['func_' + window.KEY_CODE]("Hello.");
您可以对其他对象执行此操作。
window.KEY_CODE = 'somevalue';
(function(window, document, $, undefined) {
$("#tabs_" + window.KEY_CODE); // Will escape local scope.
var keys = {
'somevalue' : function(a) { console.log(a); },
'othervalue' : function() { console.log('other'); }
};
keys[window.KEY_CODE]("Hello.");
})(window, window.document, window.jQuery);
您可以使用"new Function(args, body)"功能。正文可以是字符串,也可以通过 readFileSync 等从外部文件读取。
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 参数变量出现ngTable指令问题
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 使用每次都不同的transclude重复指令
- 打开一个模态并将其链接到AngularJS中的指令
- 从html创建一个指令,该指令按类名应用函数
- 将JSON对象传递给angular指令
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- JavaScript指令不能像我想象的那样工作
- AngularJs指令,该指令创建内部有数据对象的新指令
- AngularJS指令只识别双向绑定类型
- 从控制器继承了隔离的作用域以生成可重用的指令
- AngularJS指令出错-无法读取属性'编译'的未定义
- Angular指令在alertify setContent内容中不起作用
- 对父作用域的指令更新延迟了一步
- 指令的模板必须只有一个根元素:With restrict E&替换true
- AngularJS指令单元测试中未定义的函数
- 指令加载真的很长,检查加载时间的方法
- AngularJS指令,在元素后插入HTML
- 是否有JavaScript DEFINE 指令等效项