如何解决将get / set函数附加到js中的objects属性
| 我本质上有一个对象:var foo = function() {
this.setting = false;
this.refresh = function() { ... };
}
let a = new foo();
a.setting = true; // a.refresh() is triggered
每当写入.setting
时,我都需要触发刷新。我觉得这和ѭ2有点关系,但我不太明白。
解决方法
您需要为对象使用吸气剂和吸气剂。一种方法是直接使用getter / setter函数:
var foo = function()
{
this.setting = false;
this.getSetting = function() { return this.setting; }
this.setSetting = function(val) { this.setting = val; this.refresh(); }
this.refresh = function()
{...}
}
如果要透明地将foo.setting用作属性,则可以使用其语言构造,但是不幸的是,它们无法在浏览器之间互操作。回溯到3年前,Mozilla,Safari,Chrome和Opera支持一种方法,而Internet Explorer支持另一种方法。这是标准方法:
http://robertnyman.com/2009/05/28/getters-and-setters-with-javascript-code-samples-and-demos/
IE9还有其他功能,我不确定它是否还适用于非DOM对象。
,您可以使用JavaScript getter和setter。请参阅有关该主题的MDC文档和有关该主题的John Resig的博客文章。请注意,并非所有浏览器都支持此功能。
var Foo = function()//constructor
{
this._settings = false;//hidden variable by convention
this.__defineGetter__(\"settings\",function(){
return _settings;//now foo.settings will give you the value in the hidden var
});
this.__defineSetter__(\"settings\",function(s){
_settings = s;//set the hidden var with foo.settings = x
this.refresh();//trigger refresh when that happens
});
this.refresh = function(){
alert(\"Refreshed!\");//for testing
}
}
var a = new Foo();//create new object
a.settings = true;//change the property
//a.refresh() is triggered
尝试一下!
,您是否正在寻找设置员?像这样吗
// renamed settings property with underscore
this._settings = false;
this.settings = function(s) {
if(s !== undefined) {
this._settings = s;
this.refresh();
}
return this._settings;
};
...
var f = new foo();
f.setSettings(mySettings);
我倾向于将我的getter和setter组合成JavaScript中的一个方法,因为它很容易做到。缺点是ѭ6仍在对象上公开,任何人都可以直接写。隐藏它的唯一方法是使用闭包,这需要一种完全不同的方法来创建对象。
,如果您不受旧浏览器的限制,则可以尝试使用此处描述的方法
,我不解释为什么您尝试使用\“ new \”运算符,所以使用对象文字会更好。现在,如果您看起来类似于C#属性,则可以执行以下操作:
var myObject = function(){
//Private Members
var myProperty = \'\';
//Privileged Setter
this.setMyProperty = function(value){
myProperty = value;
};
//Privileged Getter
this.getMyProperty = function(){
return myProperty;
}
}
var MyNewObject = new myObject();
MyNewObject.setMyProperty(\"Hello,World!\");
MyNewObject.getMyProperty();
有关更多信息,我建议您这样做:http://www.crockford.com/javascript/private.html
,我知道这是一个已经解决的老问题,但是我想提供一个利用JavaScript最新语法的解决方案。
用getter和setter定义一个类:
class Foo {
constructor() {
this._setting = false;
}
get setting() {
return this._setting;
}
set setting(value) {
this._setting = value;
this.refresh();
}
refresh() {
console.log(\"refresh!\");
}
}
let foo = new Foo();
foo.setting = true; // foo.refresh() is called
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。