在JavaScript中为哈希成员定义setter
我定义如下:在JavaScript中为哈希成员定义setter,javascript,setter,Javascript,Setter,我定义如下: var props = { id: null, title: null, status: null }; 我想为状态字段定义setter(并且仅为它定义setter),如下所示: props.__defineSetter__("status", function(val){ //Checking correctness of val... status = val; }); 但它不起作用:( 那么,正确的方法是什么呢?这应该可以: pro
var props = {
id: null,
title: null,
status: null
};
我想为状态字段定义setter(并且仅为它定义setter),如下所示:
props.__defineSetter__("status", function(val){
//Checking correctness of val...
status = val;
});
但它不起作用:(
那么,正确的方法是什么呢?这应该可以:
props.__setStatus__ = function(val) {
// Check correctness of val
this.status = val;
}
用法:
props.__setStatus__('Alive');
这应该起作用:
props.__setStatus__ = function(val) {
// Check correctness of val
this.status = val;
}
用法:
props.__setStatus__('Alive');
很简单,你需要使用
this.status = val;
否则,您只是将一个不相关的全局变量status
设置为val
如前所述,setter/getter没有在IE中实现
另外,我不确定设置一个与其设置的属性同名的setter有多明智。我不确定这是否会导致冲突,但这似乎是个坏主意。是吗?理想情况下,要设置的变量应该隐藏在闭包中
var props = {
id: null,
title: null
};
(function() {
var status;
props.__defineSetter__("status", function(val){
//Checking correctness of val...
status = val;
});
props.__defineGetter__('status', function() { return status; });
}());
通过这种方式,
状态
可以完全避免直接访问,这就是使用setter和getter的要点。简单,您需要使用
this.status = val;
否则,您只是将一个不相关的全局变量status
设置为val
如前所述,setter/getter没有在IE中实现
另外,我不确定设置一个与其设置的属性同名的setter有多明智。我不确定这是否会导致冲突,但这似乎是个坏主意。是吗?理想情况下,要设置的变量应该隐藏在闭包中
var props = {
id: null,
title: null
};
(function() {
var status;
props.__defineSetter__("status", function(val){
//Checking correctness of val...
status = val;
});
props.__defineGetter__('status', function() { return status; });
}());
通过这种方式,
status
可以完全避免直接访问,这就是使用setter和getter的要点。首先是MooGoo指出的。但是,您不能使用与对象中现有变量相同的名称将属性setter分配给对象
因此,您的代码必须围绕以下内容:
var props = {
id: null,
title: null,
hStatus: null,
};
props.__defineSetter__("status", function(v){
this.hStatus = v;
});
props.__defineGetter__("status", function(){
return this.hStatus;
});
[编辑]
是的,MooGoo给出的答案比我写这8的时间要快(.第一件事是MooGoo指出的。但是,你不能使用与对象中现有变量相同的名称为对象分配属性设置器 因此,您的代码必须围绕以下内容:
var props = {
id: null,
title: null,
hStatus: null,
};
props.__defineSetter__("status", function(v){
this.hStatus = v;
});
props.__defineGetter__("status", function(){
return this.hStatus;
});
[编辑]
是的,MooGoo Eddite的回答比我写这篇文章的时间要快(.你知道目前只有Mozilla实现setter/getter吗?Chrome和Safari,可能还有Opera。IE和往常一样没有。你知道现在只有Mozilla实现setter/getter吗?Chrome和Safari,可能还有Opera。IE和往常一样没有。这些事情发生了,+1发生在你身上,+1发生在你身上