是否可以通过代码中的 from google 闭包获取编译后的函数名?

is it possible to get the compiled function name by from google closure from within the code?

我在代码中有一段需要通过名称覆盖函数。 它的简化版本在这里:

function override(obj, funcName){
   if(obj && obj[funcName])
      obj[funcName] = function(){ alert("Haha, now it's different func!"); }
   else
      console.error("Object does not contain function "+funcName);
}

它工作得很好,除非我用 Google 闭包编译它,那么,当然,它不会,因为函数 obj.doSomethingBeneficial 变得像 obj.qq...

所以问题是:是否可以从代码中知道函数的编译名称是什么?然后我可以正确地覆盖它。

编译器识别一个特殊的函数名称,它允许您以与重命名 属性 相同的方式重命名字符串:goog.reflect.objectProperty(prop name, obj)。该函数是 closure-library 的一部分,但您可以自己定义它而不包括 closure-library。

var goog = { reflect: { objectProperty: function(name, obj) { return name; } } };
if (obj && obj['funcName']) {
  obj[goog.reflect.objectProperty('funcName', obj)] =
      function(){ alert("Haha, now it's different func!"); };
} else {
  console.error("Object does not contain function "+ 'funcName');
}

需要注意的是 goog.reflect.objectProperty 的第一个参数必须是字符串文字。您不能使用变量。