JavaScript学习-对象
2017-03-29 19:52
134 查看
1, 介绍
ECMAScript中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。ECMA-262对对象的定义:无序属性的集合,其属性可以包含基本值、对象或者函数。
可以将ECMAScript的对象想象成散列表,名值对。
2,属性类型
ECMAScriptr定义只有内部采用的特性(attribute),描述属性的各种特征这些特性是为了实现JavaScript引擎用的,因此在JavaScript中不能直接访问它们。
规范格式将它们放到两对儿方括号中,例:[[Enumerable]]。
ECMAScript中有两种属性:数据属性和访问器属性。
3,数据属性
数据属性有4个描述 其行为的特性。[[Configurable]]:表示能否通过delete删除属性。默认值为true。
[[Emumerable]]:表示能否通过for-in循环返回属性,默认值true。
[[Writable]]:表示能否修改属性的值,默认为true。
[[Value]]:包含这个 属性的数据值,默认为undefined。
4,访问器属性
访问器属性包含一对儿getter和setter函数。[[Configurable]]:同上。
[[Emumerable]]:同上。
[[Get]]:读取属性时调用的函数,默认为undefined。
[[Set]]:写入属性时滴啊用的函数,默认为undefined。
getter和setter
只指定getter意味着属性时 不能写,在严格模式下,尝试写入只指定了getter函数的属性会抛出错误。类似的只指定setter的函数不能读。
两个遗留方法
可以实现和getter、setter同样的功能。
__defineGetter__()
__defineSetter__()
5,Object.defineProperty()方法
参数属性所在的对象
属性的名字
描述符对象
必须是configurable,enmerable,writable和value。
代码示例:
var person = {}; Object.defineProperty(person,"name",{ writable:false, value:"Nicholas" }); alert(person.name); //Nicholas person.name = "Greg"; alert(persion.name); // Nicholas
上述代码中将configurable设置为false,若对这个属性调用delete,非严格模式下什么也不会发生,严格模式下回导致错误。而且一旦将属性定义为不可配置,就不能再将它变回可配置了,此时再调用Object.defineProperty()方法修改除writable之外的特性,都会导致错误。
在调用Object.defineProperty()方法时,如果不指定,configurable,enumerable和writable特性默认都是false。
6,Object.definePropertys()方法
通过描述符一次定义 多个属性。接收两个参数:
第一个对象是要添加和修改其属性的对象。
第二个对象的属性与第一个对象中要添加或修改的属性一一对应。
7,Object.getOwnpropertyDescriptor()
取得给定属性的描述符,接收两个参数:属性所在的对象
读取其描述符的属性名称。
代码示例
var book = {}; Object.defineProperties(book,{ _year:{ value:2017 }, edition:{ value:1 }, year:{ get: function(){ return this._year; }, set:function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004; } } } } var descriptor = Object.getOwnpropertyDescriptor(book,"_year"); alert(descriptor.value); // 2004 alert(descriptor.configurable); //false aler(typeof descriptor.get); // undefined var descriptor = Object.getOwnpropertyDescriptor(book,"year"); alert(descriptor.value); // undefined alert(descriptor.enumerable);// false alert(typeof descriptor.get);// function
相关文章推荐
- JavaScript 学习笔记 之 JavaScript 核心语言对象
- [翻译]javascript学习笔记 (三)-window对象
- JavaScript学习记录(对象)
- JavaScript学习-string对象
- JavaScript学习-Object对象
- [JavaScript]Object(对象)学习
- JavaScript 学习_4_原型_对象_继承
- asp.net ajax 学习笔记--对javascript对象的扩展
- JavaScript学习之一:采用哪种方式定义类或对象?
- 学习javascript对象创建方法(参照别人代码,持续更新)
- javascript学习随笔(Navigator 对象)
- 学习 Javascript 正则表达式(一)————使用正则表达式对String对象解析
- Javascript学习笔记--Object对象
- javascript入门经典学习四(对象,流程控制,函数)
- [导入]Silverlight 2学习教程(六):Silverlight托管代码调用Javascript中的JSON对象
- javascript学习笔记(一)--对象
- Javascript学习笔记(二)Javascript核心之对象和数组
- javascript学习手记(JavaScript对象)
- 学习Javascript中的对象用法学习笔记
- JavaScript 学习_3.使用对象直接创建对象