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