在函数调用中,不能用变量值替换硬编码的属性名称值

时间:2013-04-16 19:40:19

标签: javascript unobtrusive

我正在尝试在旧的liferay项目(3.6)中使用不显眼的日期选择器,我相信它正在运行prototype.js。

我有这样的电话:

datePickerController.createDatePicker({formElements:{"elementId":"%d/%m/%Y"}});

对此做出了:

createDatePicker:       function(options) { addDatePicker(options); },

我无法使用变量代替硬编码的elementId。我已经尝试了数组索引,点索引,字符串变量等,但无法使其工作。

在我看来,被调用函数只需要一个通常未指定的对象,但如果我执行上述操作之一(数组,点等),浏览器会抱怨括号(数组索引),点(点索引) ),parens或预期格式以外的任何东西。

底层调用模块(addDatePicker)需要formElements,所以我无法改变它。

我不明白浏览器是如何知道这个函数的参数格式的......我显然在这里很缺乏!

指针非常感谢。

e.g。

obj[tag] = 'elementId'; 
datePickerController.createDatePicker({formElements:{obj[tag]:"%d/%m/%Y"}});     
// SCRIPT1003: Expected ':'

1 个答案:

答案 0 :(得分:2)

您不能将变量键放在对象文字中 - 语法要求键是常量值。

您需要创建对象并填充它,然后传递它:

var obj = {};
var tag = 'elementId';
obj[tag] = "%d/%m/%Y";
// you now have obj = { elementId: "%d/%m/%Y" }

...createDatePicker({ formElements: obj });