Ale*_*tau 10 javascript variables function
我在Javascript中有以下代码:
jQuery(document).ready(function(){
var actions = new Object();
var actions;
actions[0] = 'create';
actions[1] = 'update';
for (key in actions) {
// Dialogs
var actions[key]+Dialog = function(){
$('#'+actions[key]+'dialog').dialog('destroy');
$('#'+actions[key]+'dialog').dialog({
resizable: false,
height:600,
width:400,
modal: true,
buttons: {
Cancel: function() {
$(this).dialog('close');
}
}
});
};
}
});
Run Code Online (Sandbox Code Playgroud)
我想在循环中创建2个函数(createDialog和updateDialog).我怎样才能做到这一点?在PHP中有非常简单的$$ var.但是如何在JS中使用变量变量我不知道.
谢谢
像这样:
actions[key + "Dialog"] = function () { ... };
Run Code Online (Sandbox Code Playgroud)
但是,由于Javascript函数通过引用捕获变量,因此您的代码将无法按预期工作.
您需要在单独的函数内部定义内部函数,以便每个函数都获得一个单独的key
变量(或参数).
例如:
var actionNames = [ 'create', 'update' ]; //This creates an array with two items
var Dialog = { }; //This creates an empty object
for (var i = 0; i < actionNames.length; i++) {
Dialog[actionNames[i]] = createAction(actionNames[i]);
}
function createAction(key) {
return function() { ... };
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
Dialog.create(...);
Run Code Online (Sandbox Code Playgroud)
您正尝试使用多个与对话框相关的函数来污染全局命名空间.
这是一个坏主意; 最好将函数组织到命名空间中.
如果您真的想要对全局命名空间进行规范,可以这样做:
var actionNames = [ 'create', 'update' ]; //This creates an array with two items
for (var i = 0; i < actionNames.length; i++) {
this[actionNames[i] + 'Dialog'] = createAction(actionNames[i]);
}
Run Code Online (Sandbox Code Playgroud)
这将创建称为createDialog
和的全局函数updateDialog
.
在正常的函数调用中,this
关键字引用全局命名空间(通常是window
对象).
归档时间: |
|
查看次数: |
18171 次 |
最近记录: |