您的位置:首页 > Web前端 > JavaScript

Javascript对象的数据属性和访问器属性

2016-01-10 15:08 866 查看

之前看了Javascript Dom编程艺术,在第二章对javascript的语法功能介绍较少,于是又开始看了Javascript高级程序设计,感觉这本真是很不错啊,对知识讲解的很详细,对我这个初学者来说,很有收获。

不多说,先来谈谈对js类的体会,之前创建一个新类,赋予属性和方法,比如:
var person=new Object();
person.name="xuzhiwei";
person.showName=function(){
alert(this.name);
};
person.showName();


这样浏览器输出xuzhwei,这是以前老的方法,现在流行的创建类的方法是创建字面量方法:
var person={
name:"xuzhiwei",
showName: function () {
alert(this.name);
}
};
person.showName();


也能得到相同的结果。
然后是这次的重点,对象有两种属性:数据属性和访问器属性。

数据属性有四个:

Configurable,这个是表示能否用delete删除属性从而重新定义属性,默认值是true。
Enumerable:表示能否通过for-in循环访问属性,默认属性也是true。
Writable:表示对属性能否修改,默认还是true。
Value:表示这个属性的值是多少,因为一开始没有赋值,默认是undefined。
设置数据属性的方法是Object的方法:defineProperty,它接受三个参数:对象名字,要设置的属性名字,还有一个描述对象。
接下来看个小例子:
var person={
name:"xuzhiwei",
showName: function () {
alert(this.name);
}
};
Object.defineProperty(person,"name",{
value:"赵超",
writable:false
});
alert(person.name);
最后输出的结果是:赵超,可以发现将原来的值改变了,因为这里writable设置的是false,所以现在值是不可以修改了。

访问器属性:
get:在访问数据的时候(className.propertyName)调用的方法,默认undefined。
set:在给对象赋值的时候调用的方法,默认undefined。
访问器属性也是必须用Object的defineProperty方法调用,看下面的例子:
var person={
_name:"xuzhiwei",
editCount:0
};
Object.defineProperty(person,"name",{ //name表示接下来要访问的值,不是_name;
get: function () {
return this._name;
},
set: function (newValue) {
this._name = newValue;
this.editCount++;
}
});
alert(person.name);
person.name="李奇然";
alert(person.name+" "+person.editCount);


person对象的name由于加了_,不能直接访问,类似java的private属性。最后输出的是:李奇然 1。表示赋值也改变了editCount的值。
当然也可以只指定get,表示这个name只能读不能写,类似之前的writable:false。
当然还有defineProperties()方法,表示一次性定义多个属性,比如:
var person = {};
Object.defineProperties(person, {
_name: {
writable: true,
value: "赵超"
},
editCount: {
writable: true,
value: 0
},
name: {
get: function () {
return this._name;
}
,
set: function (newValue) {
this._name = newValue;
this.editCount++;
}
}

})
;
alert(person.name);
person.name = "李奇然";
alert(person.name + " " + person.editCount);


在这个例子中,一次性定义了多个属性,运行结果和之前的一样。只不过第一个对话框显示的是赵超。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: