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);
在这个例子中,一次性定义了多个属性,运行结果和之前的一样。只不过第一个对话框显示的是赵超。
相关文章推荐
- js 获取checkbox选中项目
- JS+html5实现图片上传预览
- js动画--一个小bug处理下
- js动画--一个小bug处理下
- JavaScript 中 this用法详解
- uglifyjs压缩批处理
- 用Js,DHTML控制表格的某一列的显示与隐藏
- js 事件绑定的方法
- 通过js写的一个比较简单的点击切换图片效果
- 提出一个Json解析语法规范
- 对geojson数据的加载
- openlayers中获得geojson格式数据
- 回顾Quick Sort(Javascript 实现)
- js实现table排序
- three.js学习笔记 相机控件
- JavaScript全选复选框checkbox效果
- Js中的转向问题
- JS页面刷新总结
- JavaScript全选复选框checkbox效果
- Js中的转向问题