标签:ble style 笔记 cti person javascrip mil 设计模式 过程
es中有两种属性:数据属性和访问器属性
数据属性包含一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个描述其行为的特性
要修改属性默认的特性,必须使用es5的object.defineProperty方法,这个方法接收三个参数:属性所在的对象、属性的名字和一个描述符对象,其中,描述符对象的属性必须是:configurable、enumerable、writable和value,设置其中一个或多个值,可以修改对应的特性值,例如:
var person = {}; Object.defineProperty(preson, "name", { weitable: false, Value: "Nicholas" }); alert(person.name);//”Nicholas” person.name = "Greg"; alert(person.name)//”Nicholas”
注意:ie8是第一个实现object.defineProperty方法的浏览器版本,然而,这个版本的实现存在诸多限制:只能在DOM对象上使用这个方法,而且只能创建访问器属性,由于实现不彻底,建议读者不要在ie8中使用此方法.
访问器属性不包含数据值;他们包含一对getter和setter函数在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值,在写入访问器属性时,会调用setter函数并传入新值,访问器属性有如下4个特性
访问器属性不能直接定义,必须使用Objiect.defineProperty来定义.
由于未对象定义多个属性的可能性很大,es5又定义了一个Object.difineProperties方法,利用这个方法可以通过描述符一次定义多个属性,这个方法接收两个对象参数;第一个对象是要添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应.
例如:
var book={}; Object.defineProperties(book,{ _year:{ value:2004 }, edition:{ Value:1 }, year:{ get:function(){ return this._year; }, set:function(newValue){ if(newValue>2004){ this._year=newValue; this.edition+=newValue-2004; } } } })
在es5中Object.getOwnPropertyDescriptor方法,可以取得给定属性的描述符,这个方法接收两个参数:属性所在的对象和要读取描述的属性名称,返回值是一个对象,如果是访问器属性,这个对象的属性有configurable,enumerable,get和set;如果是数据属性,这个对象的属性有configurable,enumerable,writable和value.例如:
var book={}; Object.defineProperties(book,{ _year:{ Value:2004 }, 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 alert(typeof descriptor.get);//undefined var descriptor=Object.getOwnPropertyDescriptor(book,"year"); alert(descriptor.value);//underfined alert(descriptor.enumerable);//false alert(typeof descriptor.get);//function
工厂模式是软件工程领域一个广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在javascript中的实现).
function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); } return o; } var person1=createPerson("Nicholas",29,"Software Enginneer"); var person2=createPerson("Greg",27,"Doctor");
标签:ble style 笔记 cti person javascrip mil 设计模式 过程
原文地址:http://www.cnblogs.com/hetaojs/p/6094655.html