gpt4 book ai didi

javascript - 如何解决 Closure Compiler 中对象属性的重命名问题?

转载 作者:行者123 更新时间:2023-11-29 19:57:38 25 4
gpt4 key购买 nike

我有一个使用类似以下方法的 JS 库:

this.on('doAction', function (args) {
console.log(args.name);
console.log(args.arg1 + ' ' 9 args.arg2);
});
this.trigger('doAction', {name: 'write', arg1: 1, arg2: 2});

但经过高级优化后对象属性namearg1arg2将是ab c,所以我无法在 doAction 处理程序中获取它们。我知道我可以对属性名称使用引号来防止它发生变化,但是有没有更好的方法,比如特殊的 util 函数,比如:

this.trigger('doAction', MYAPP.util.intoObject{name: 'write', arg1: 1, arg2: 2});

这允许我保存对象属性名称吗?

最佳答案

属性的重命名应该一致。例如,您的示例编译为:

this.c("doAction", function(a) {
console.log(a.name);
console.log(a.a + " " + a.b)
});
this.d("doAction", {name:"write", a:1, b:2});

您可以看到属性以不间断的方式重命名。除非启用基于类型的实验性优化,否则这种行为总是如此,但即便如此,也应妥善处理这种特定情况。

如果您需要绝对不重命名的属性,您可以在外部文件中定义一个接口(interface)并将您的方法类型转换为该类型。

/** @externs */
/** @interface */
function myInterface() {}
/** @type {number} */
myInterface.prototype.arg1 = 0;

在你的例子中:

this.on('doAction', /** @param {myInterface} args */  function (args) {
console.log(args.name);
console.log(args.arg1 + ' ' + args.arg2);
});
this.trigger('doAction',
/** @type {myInterface} */ ({name: 'write', arg1: 1, arg2: 2}));

关于javascript - 如何解决 Closure Compiler 中对象属性的重命名问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15698631/

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