gpt4 book ai didi

JavaScript 杂技 : How to assign an object literal to an eval-uated property?

转载 作者:行者123 更新时间:2023-11-30 23:42:31 26 4
gpt4 key购买 nike

Original code来自JamieMThomas ,一个(非常好的人,正在尝试将 Microsoft JQuery 模板和链接结合起来):

mapping[binding.field] = {
convert: function (value, source, target) {
if (binding.converter && binding.converter.convert) {
value = binding.converter.convert(value, source, target)
if (value === undefined)
return;
}
$(target).attr(attrName, value);
}
};

我正在尝试破解它,以允许 binding.field 处理像 "LPC[0].itemid" 这样的字符串(字面意思是一个字符串)。我使用 eval 作为一个糟糕的选择,但这是我能做的最快的事情(稍后将重写它)。我最初尝试将内容分配给 eval('') 本身,但它不允许我。

eval('(mapping.' + binding.field + ')') =
{ // rest is the same
convert: function (value, source, target) {
if (binding.converter && binding.converter.convert) {
value = binding.converter.convert(value, source, target)
if (value === undefined)
return;
}
$(target).attr(attrName, value);
}
};

显然左侧的赋值无效。我怎样才能做到这一点?

最佳答案

您可以将整个作业放入eval中:

eval('mapping.' + binding.field + ' = { ... }');

这将是一个非常大的字符串,包含函数定义
要使字符串更小,可以将函数放在外部变量中:

var converter = function (value, source, target) {
if (binding.converter && binding.converter.convert) {
value = binding.converter.convert(value, source, target)
if (value === undefined)
return;
}
$(target).attr(attrName, value);
};
eval('mapping.' + binding.field + ' = { convert: converter }');

关于JavaScript 杂技 : How to assign an object literal to an eval-uated property?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4157088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com