我正在尝试在旧的 liferay 项目(3.6)中使用不引人注目的日期选择器,我相信该项目正在运行prototype.js。
我有一个这样的电话:
datePickerController.createDatePicker({formElements:{"elementId":"%d/%m/%Y"}});
这样做:
createDatePicker: function(options) { addDatePicker(options); },
我无法使用变量来代替硬编码的 elementId。我尝试过数组索引、点索引、字符串变量等,但无法使其工作。
在我看来,被调用的函数只需要一个通常未指定的对象,但是如果我执行上述操作之一(数组、点等),浏览器会提示括号(数组索引)、点(点索引) )、括号或任何非预期格式的内容。
底层调用的模块(addDatePicker)需要 formElements,所以我无法更改它。
我不明白浏览器如何知道足够多的信息来提示函数参数的格式......显然我在这里严重缺乏!
非常感谢指点。
例如
obj[tag] = 'elementId';
datePickerController.createDatePicker({formElements:{obj[tag]:"%d/%m/%Y"}});
// SCRIPT1003: Expected ':'
最佳答案
您不能将变量键放入对象文字中 - 语法要求键是常量值。
您需要创建对象并填充它,然后传递它:
var obj = {};
var tag = 'elementId';
obj[tag] = "%d/%m/%Y";
// you now have obj = { elementId: "%d/%m/%Y" }
...createDatePicker({ formElements: obj });
关于javascript - 无法在函数调用中用变量值替换硬编码的属性名称值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16045663/