Javascript Google闭包和生成的getter/setter
我正在尝试让KineticJS与Google闭包编译器一起工作。然而,KineticJS根据变量的名称生成了它的getter和setter 大概是这样的:Javascript Google闭包和生成的getter/setter,javascript,google-closure-compiler,google-closure,kineticjs,Javascript,Google Closure Compiler,Google Closure,Kineticjs,我正在尝试让KineticJS与Google闭包编译器一起工作。然而,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
// 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']);
//添加getter和setter方法
dynamic.Node.addSetters=函数(构造函数,arr){
对于(变量n=0;n
因此,使用addGettersSetters方法,可以根据变量的名称生成getter&setter
然而,Google closure无法解释这一点,并给出警告(不是错误,只是警告,但仍然…):警告-属性setImage从未在Kinetic.Image上定义
我可以为每个getter和setter添加extern。或者,我可以重写所有getter/setter的东西,手工将其变成实际的方法(非生成的方法)。最后一部分似乎是最好的,因为闭包可以优化它们,并用它做一些魔术(我希望)。虽然这将是相当多的工作,所以我想知道,是否可以运行我的程序,生成getter和setter,然后提取它们?或者,如果有人有更好的想法,也欢迎
谢谢!
-Pablo哪种答案最好取决于您使用的编译模式以及您对库的了解程度 如果您使用的是高级模式,并且使用其他源代码编译库,那么重写可能是最好的(我假设这是您当前正在尝试的)。但是,如果单独加载库或将库源连接到高级编译源,则外部定义是一个不错的选择(如果库维护人员不支持闭包编译器高级编译,则这是一个不错的方法)
人们创建了各种工具来帮助为库自动生成外部程序,但通常最好是有人创建外部程序并用库维护它们。一些库外部程序托管在Closure编译器源代码存储库中,由社区维护,因此这始终是一个选项。好的,谢谢。这正是我所想的。我现在正在尝试闭包库,看看将我的项目转换成闭包库有多困难,尽管它的教程少了很多,所以速度还是有点慢:P。我认为这是对我的问题的一个很好的回答。