【发布时间】:2014-09-12 01:04:15
【问题描述】:
假设我有一个这样的函数proxyThrough:
function proxyThrough(parentClass, childObjPropertyName, methodName) {
parentClass.prototype[methodName] = function() {
this[childObjPropertyName][methodName].apply(this[childObjPropertyName], arguments);
};
}
childPropertyName 和methodName 都是字符串,它通过名称查找函数。
我知道这将无法在缩小后继续存在。
我怎样才能让这样的函数在缩小后仍然存在?
示例
这就是我目前正在做的事情:
var BaseView = require('./BaseView');
var FooView = require('./FooView');
function BarView() {
this._fooView = new FooView();
}
BarView.prototype = Object.create(BaseView.prototype);
BarView.prototype.constructor = BarView;
BarView.prototype.anAction = function() {
this._barView.anAction.apply(this._barView, arguments);
};
BarView.prototype.anotherAction = function() {
this._barView.anotherAction.apply(this._barView, arguments);
};
这就是我想要做的:
var BaseView = require('./BaseView');
var FooView = require('./FooView');
function BarView() {
this._fooView = new FooView();
}
BarView.prototype = Object.create(BaseView.prototype);
BarView.prototype.constructor = BarView;
function proxyThrough(parentClass, childObjPropertyName, methodName) {
parentClass.prototype[methodName] = function() {
this[childObjPropertyName][methodName].apply(this[childObjPropertyName], arguments);
};
}
['anAction', 'anotherAction'].forEach(proxyThrough.bind(null, BarView, '_fooView'));
【问题讨论】:
-
变量/参数名称是否随着使用值而不是名称而改变并不重要。仅当操作类似于 AngularJS's Dependency Injection scheme 时才需要避免混淆。
-
当您需要将变量名称与字符串的值匹配时,缩小需要特殊的解决方法。变量名本身没有危险。
-
在这个任务的另一个阅读中:使用一个可以控制的混淆器,这样被代理的方法/属性(以及这样的名称)不会改变。一旦它们被改变..它们被改变(在代码甚至运行之前)并且这些名称无法解析为原始名称,除非有一些保留的地图。
-
@PM77-1 和 user2864740 :我不太清楚你的意思。为了明确起见,我包含了一个 SSCCE 来说明我的用例。它看起来不会在缩小后幸存下来,因为我确实将字符串传递给
proxyThrough函数。 -
你确定它不会在缩小后存活吗?虽然函数参数经常更改 - 由于括号表示法的常见程度,对象字段通常不会被缩小器触及。
标签: javascript minify