2017-01-24 23 views
1

我有一段代码,我需要通过其名称覆盖函数。 它简化版本在这里:是否有可能通过从代码中的谷歌关闭获得编译的函数名称?

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); 
} 

它完美的,除非我与谷歌关闭编译它,然后,当然,这不,因为功能obj.doSomethingBeneficial变得像水木清华... obj.qq

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

回答

1

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

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第一个参数必须是字符串文字。你不能使用一个变量。

+0

谢谢,但我如何使用它在我的情况下,你能举个例子吗?我只是不明白我怎么能说清楚编译器,我想这个特定的对象,我工作的缩短名称... – shal

+0

@shal增加了一个例子 –

相关问题