问题:是否可以让object1以某种方式提供object2的属性,不需要getter和setter?所以我可以a = object1.attribute
和object1.attribute = a
。
示例:我正在实现对页面上绝对定位的HTML对象进行动态对齐的支持。应支持各种对齐 - 左,右,上,下,水平中心,垂直中心或均匀间隔。为了减少重复代码的数量,我想出了实现类Direction
的解决方案,它可以是水平和垂直的,并且在与Element
相关的Facade-ish模式下工作。它作为属性传递给对齐函数。同样地,我正在处理左/右/中间并均匀地分配区别,但是为了保持简单,我们在这里忽略它。
这是班级。
Direction = function(selector) {
this.selector = selector;
}
Direction.prototype.get = function(element) {
return parseInt(element.style[this.selector]);
}
Direction.prototype.set = function(element, value) {
element.style[this.selector] = value + 'px';
}
以下是客户可以使用的“常量”。
Direction.VERTICAL = new Direction('left');
Direction.HORIZONTAL = new Direction('top');
以下是执行“最小”对齐(左侧或顶部)的公共方法。
alignMin = function(elements, direction) {
var min = Number.MAX_VALUE;
for (var i = 0; i < elements.length; i++) {
min = Math.min(min, direction.get(elements[i]));
}
for (var i = 0; i < elements.length; i++) {
direction.set(elements[i], min);
}
}
此处的客户端演示了预期用途。
alignDivsToLeft = function() {
alignMin(document.getElementsByTagName("div"), Direction.VERTICAL);
}
JSFiddle上的工作示例:http://jsfiddle.net/7Tpam/
再次提问:这一切都有效,我只是想知道,如果不是Direction.get()
和Direction.set()
方法,我可以做一些事情(对值的引用?)来直接访问“proxined”属性,因此alignMin
函数可以只使用
...
min = Math.min(min, direction.value); // possibly with parseInt()
...
和
...
direction.value = min; // possibly with + 'px'
...
如果有一个简单的解决方案,它将是一种更短,更清晰,更优雅的方式,特别是在具有更多属性(位置,尺寸,......)的情况下。另外还有好奇心的因素(仍在学习JavaScript的魔力,所以......)。
答案 0 :(得分:1)
某些浏览器中的Javascript支持getters and setters as described in this article
使用您的对象:
Direction = function(selector) {
this._selector = selector;
}
Direction.prototype = {
get selector(){
return this._selector;
},
set selector(selector){
this._selector = selector
}
}
用法:
var direction = new Direction("left");
console.log(direction.selector); // getter
direction.selector = 'right' //setter
JSFiddle:http://jsfiddle.net/7Tpam/1/
首先,这似乎是您所描述的内容,但要注意它没有全球支持
火狐
Safari 3+(全新)
Opera 9.5(即将推出)
来源:上面链接的文章