Google闭包和生成的getters/ssetter
Google Closure and generated getters/setters
我正在尝试让KineticJS与谷歌闭包编译器一起工作。然而,KineticJS生成了它的getters&基于变量名称的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方法可以生成getters&基于变量名称的setter。
然而,谷歌关闭无法解释这一点,并发出警告(不是错误,只是警告,但仍然…):警告-属性集图像从未在Kinetic.Image 上定义
我可以为每个getter&二传手。或者,我可以重写所有getter/setter的内容,使其成为实际的方法(非生成的方法)。最后一部分似乎是最好的,从那时起,Closure可以优化这些并用它做一些魔术(我希望如此)。虽然这将是一项相当艰巨的工作,所以我想知道,有可能运行我的程序吗,所以它生成getters&setters,然后提取它们?或者,如果有人有更好的想法,也欢迎。
谢谢!-Pablo
哪个答案最好取决于您使用的编译模式以及您是库的方式。
如果您使用ADVANCED模式并使用其他源代码编译库,那么重写可能是最好的(我认为这是您目前正在尝试做的)。但是,如果要单独加载库或将库源连接到ADVANCED编译源,则外部定义是一个不错的选择(如果库维护人员不支持Closure Compiler ADVANCED编译,则这是一个很好的方法)。
人们已经创建了各种工具来帮助自动生成库的外部元素,但通常最好是有人创建外部元素并用库维护它们。一些外部库托管在Closure Compiler源存储库中,并由社区维护,因此这始终是一种选择。
相关文章:
- Google闭包和生成的getters/ssetter
- Can't get setters/getters to work
- 用一个数组应用Chai可链接的getters
- JavaScript Getters and Setters issue
- setters and getters in javascript
- Javascript Getters And Setters
- JS getters:定义属性替换或补充旧的内联“get”“set”语法
- 为什么使用访问器(getters 和 setters)
- Getters and setters in javascript
- Getters and Setters on angular.extend $scope
- Javascript OOP, getters, setters, run - D3.js - 通过选项设置使图形可重用
- 节点模块作为getters和setters提供
- 如何在handlers.js模板中使用getters
- 窗口上的Javascript getters/ssetters
- Getters and Setters in AngularJS
- JavaScript中的Getters和Setters(语法正确吗?)
- 将 Javascript getters/setter 复制到另一个原型对象
- 你能在Javascript代码中使用setters和getters吗?
- Javascript getters and setters - recursion issue