Javascript 对属性的引用,而不是对getter和setter的引用

Javascript 对属性的引用,而不是对getter和setter的引用,javascript,Javascript,问题:是否可以让object1以不需要getter和setter的方式提供object2的属性?所以我可以做a=object1.attribute和object1.attribute=a 示例:我正在实现对页面上绝对定位的HTML对象动态对齐的支持。应支持所有类型的对齐-左侧、右侧、顶部、底部、水平中心、垂直中心或均匀间隔。为了减少重复代码的数量,我提出了实现classDirection的解决方案,它可以是水平的,也可以是垂直的,并且可以在元素的Facade-ish模式下工作。它将作为属性传递给

问题:是否可以让object1以不需要getter和setter的方式提供object2的属性?所以我可以做
a=object1.attribute
object1.attribute=a

示例:我正在实现对页面上绝对定位的HTML对象动态对齐的支持。应支持所有类型的对齐-左侧、右侧、顶部、底部、水平中心、垂直中心或均匀间隔。为了减少重复代码的数量,我提出了实现class
Direction
的解决方案,它可以是水平的,也可以是垂直的,并且可以在
元素的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');
下面是执行“最小”对齐(左对齐或上对齐)的公共方法

JSFIDLE上的工作示例:

再次提问:所有这些都有效,我只是想知道,如果我不使用
Direction.get()
Direction.set()
方法,而直接访问“proxified”属性,那么
alignMin
函数就可以使用

...
min = Math.min(min, direction.value);     // possibly with parseInt()
...


如果有一个简单的解决方案,它将是一个更短、更清晰、更优雅的方式,特别是在具有更多属性(位置、维度等)的情况下。另外还有好奇的因素(仍然在学习JavaScript的魔力,所以…。

一些浏览器支持JavaScript

使用对象:

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:

首先,这似乎就是您所描述的,但请注意,它没有全球支持

Firefox
Safari 3+(全新)
Opera 9.5(即将推出)
资料来源:以上链接文章


我知道这个问题的大部分内容,但是如果你只有
min=Math.min(min,direction.value)
它怎么知道你想要min
value
来自哪个元素呢?同样,使用
direction.value=min您不再传递要设置的元素的引用。@jamice-Oh。没错。因此,这个例子并不能很好地说明我想要实现的目标。不管怎样,为了这个问题,请忽略这个事实,或者我会想出一些更好的例子,或者想象一下
元素
属性是“不知何故”传递到那里的:)哦,这正是我想要的。我就是无法用谷歌搜索它。谢谢
...
direction.value = min;                    // possibly with + 'px'
...
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