-->

谷歌关闭和生成的getter / setter方法(Google Closure and gener

2019-09-22 02:25发布

我试图让KineticJS与谷歌关闭编译工作。 KineticJS,但是,产生它的getter和setter方法基于变量的名称。

事情是这样的:

// add getter and setter methods
Kinetic.Node.addSetters = function(constructor, arr) {
    for(var n = 0; n < arr.length; n++) {
        var attr = arr[n];
        this._addSetter(constructor, attr);
    }
};
Kinetic.Node.addGetters = function(constructor, arr) {
    for(var n = 0; n < arr.length; n++) {
        var attr = arr[n];
        this._addGetter(constructor, attr);
    }
};
Kinetic.Node.addGettersSetters = function(constructor, arr) {
    this.addSetters(constructor, arr);
    this.addGetters(constructor, arr);
};
Kinetic.Node._addSetter = function(constructor, attr) {
    var that = this;
    var method = 'set' + attr.charAt(0).toUpperCase() + attr.slice(1);
    constructor.prototype[method] = function() {
        var arg;
        if(arguments.length == 1) {
            arg = arguments[0];
        }
        else {
            arg = Array.prototype.slice.call(arguments);
        }
        var obj = {};
        obj[attr] = arg;
        this.setAttrs(obj);
    };
};
Kinetic.Node._addGetter = function(constructor, attr) {
    var that = this;
    var method = 'get' + attr.charAt(0).toUpperCase() + attr.slice(1);
    constructor.prototype[method] = function(arg) {
        return this.attrs[attr];
    };
};
// add getters setters
Kinetic.Node.addGettersSetters(Kinetic.Node, ['x', 'y', 'scale', 'rotation', 'opacity', 'name', 'id', 'offset', 'draggable', 'dragConstraint', 'dragBounds', 'listening']);

因此,与addGettersSetters方法你生成getter和setter方法基于变量的名称。

谷歌关闭却无法解释这一点,并给出了警告(不是错误,只是警告,但仍...):警告 - 物业setImage从不Kinetic.Image定义

我可以添加实习医生为每个吸气和setter方法。 我也可以重写所有的getter / setter的东西,使手工它实际的方法(非生成的)。 这最后一部分似乎是最好的,因为再封可以优化的,做一些神奇的它(我希望)。虽然这会是相当多的工作,所以我在想,是不是可以运行我的程序,所以它产生在吸气和setter方法,然后提取呢? 或者,如果有人有更好的想法,那的欢迎了。

谢谢! -Pablo

Answer 1:

其答案是最好的取决于你所使用的编译模式,您是如何图书馆。

如果您正在使用高级模式并编辑与您的其他来源的图书馆,重写可能最好的(我想这是你目前也在试图做的)。 但是,如果单独加载库或串联的源库对您的高级编译源,extern定义是一个不错的选择(这是,如果库的维护者不支持关闭编译高级编译一个好方法)。

有迹象表明,人们为了帮助自动生成库实习医生各种工具,但它通常最好的,如果有人创建的实习医生,并与库维护他们。 一些库实习医生都在关闭编译器源代码库主办,由社区维护,以便始终是一个选择。



文章来源: Google Closure and generated getters/setters