是否可以通过代码中的 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
的第一个参数必须是字符串文字。您不能使用变量。
我在代码中有一段需要通过名称覆盖函数。 它的简化版本在这里:
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
的第一个参数必须是字符串文字。您不能使用变量。