Google closure compiler 使用闭包编译器时如何保留jQuery.ajax.data对象?

Google closure compiler 使用闭包编译器时如何保留jQuery.ajax.data对象?,google-closure-compiler,Google Closure Compiler,将闭包编译器与高级_优化一起使用时,jQuery.ajax.data对象会发生更改: $.ajax({ type: "POST", url: "ajax.php", data: { act : "some" }, success : function(data){} }); 数据对象被转换为{L:“some”} 我可以使用引号,比如'act':“some”,但我希望它在没有引号的情况下工作。 在我的externs文件中有: /**@type{Object.}*/

将闭包编译器与高级_优化一起使用时,jQuery.ajax.data对象会发生更改:

$.ajax({
  type: "POST",
  url: "ajax.php",
  data: {
     act : "some"
  },
  success : function(data){}
});
数据对象被转换为
{L:“some”}

我可以使用引号,比如
'act':“some”
,但我希望它在没有引号的情况下工作。 在我的externs文件中有:

/**@type{Object.}*/
jQuery.ajax.data

但这不起作用。Closure编译器版本1043

尝试使用类似以下内容的外部代码:

var jQuery = {};
jQuery.ajax = {
    data: '' 
}

这不会重命名“jQuery.ajax”和“jQuery.ajax.data”

您需要引号来告诉Closure不要损坏属性名。这是一项要求。没有引号,无法使其工作。外部文件也不正确
jQuery.ajax.data
表示
jQuery.ajax
下的
data
属性。
jQuery.ajax
(这是一个函数)下没有
data
属性
data
是作为参数传递给
jQuery.ajax
的对象的属性。您“外部化”了错误的东西。但是,如果您这样做:
var foo={};foo.act=null
在外部文件中,Closure将不再重命名所有对象上的任何名为“act”的属性(或任何名为“foo”的变量,您不关心),包括传递给“data”属性的对象哈希中的属性。但是,请注意,所有名为“act”的属性都不会被重命名,即使是在您希望它们重命名的时候!同样的问题,同样的答案