如何根据将在minifcation中存活的属性名称创建检查对象/函数的Javascript函数?

时间:2014-09-12 01:04:15

标签: javascript minify

假设我有一个这样的函数proxyThrough

function proxyThrough(parentClass, childObjPropertyName, methodName) {
    parentClass.prototype[methodName] = function() {
        this[childObjPropertyName][methodName].apply(this[childObjPropertyName], arguments);
    };
}

childPropertyNamemethodName都是字符串,它按名称查找函数。 我知道这不会因为缩小而存在。

如何才能让这样的功能在缩小时继续存在?


示例

这就是我目前正在做的事情:

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

1 个答案:

答案 0 :(得分:0)

我想这取决于minifier如何工作,但如果它一致地重命名相同的属性名,你可以使用辅助函数来获得缩小的属性名称:

function minifiedName(obj) {
    for (var prop in obj) {
        return prop;
    }
}

[
   minifiedName({anAction: null}),
   minifiedName({anotherAction: null})
].forEach(proxyThrough.bind(null, BarView, '_fooView'));