JavaScript高级程序设计(面向对象的程序设计)
来源:互联网 发布:航拍视频软件 编辑:程序博客网 时间:2024/04/29 18:46
6.1理解函数
var person={ name:"Nicholas", age:29, job:"software engineer", sayName:function() { alert(this.name); } }
为对象添加属性以及方法。
6.1.1属性类型
ECMAScript中有两种属性:数据属性和访问器属性。
要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()方法。这个方法可以接收三个参数:属性所在的对象,属性的名字,一个描述符对象。其中,描述符对象的属性必须是:configurable,enumerable,writable和value。设置其中的一或多个值,可以修改对应的特性值。例如:
var person={}; Object.defineProperty( person,"name", {writable:false, value:"Nicholas" }); alert(person.name);//Nicholas person.name="Greg"; alert(person.name);//Nicholas
这个例子创建了一个名为name的属性,它的值“Nicholas”是只读的。这个属性的值是不可修改的。如果尝试为它指定新值,则在非严格模式下,赋值操作将被忽略;在严格模式下,赋值操作将会导致抛出错误。
类似的规则也适用于不可配置的属性。例如:
var person={}; Object.defineProperty( person,"name", { configurable:false; value:"Nicholas" }); alert(person.name);//Nicholas delete person.name; alert(person.name);//Nicholas
把configurable设置为false,表示不能从对象中删除属性。如果对这个属性调用delete,则在非严格模式下什么也不会发生,而在严格模式下会导致错误。而且,一旦把属性定义为不可配置的,就不能把它变为可配置的。此时,再调用Object.defineProperty()方法修改除writable之外的特性都会导致错误。
也就是说,可以多次调用Object.defineProperty()方法修改同一个属性,但在把configurable特性设置为false之后就会有限制。
在调用Object.defineProperty()方法时,如果不指定,configurable、enumerable和writable特性的默认值都是false.多数情况下,可能都没有必要利用Object.defineProperty()方法提供的这些高级功能。
建议不要在ie8使用object.defineProperty()方法。
2.访问器属性
访问器属性不包含数据值;它们包含一对getter和setter函数(不过这两个函数都不是必须的)。在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据,访问器属性有如下4个特性。
6.1.2 定义多个属性
由于为对象定义多个属性的可能性很大。ECMAScript5又定义了一个object.defineProperties()方法。利用这个方法可以通过描述符一次定义多个属性。这个方法接收两个对象参数:第一个对象是要添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应。例如:
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; } } } })
6.1.3读取属性的特性
6.2创建对象
函数createPerson()函数能够根据接受的参数来构建一个包含所有必要信息的person对象。可以无数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。
6.2.2构造函数模式
- 《Javascript高级程序设计》面向对象的程序设计
- JavaScript高级程序设计4--面向对象的程序设计(上)
- JavaScript高级程序设计4--面向对象的程序设计(下)
- javascript高级程序设计(第六章面向对象的程序设计)
- JavaScript高级程序设计(面向对象的程序设计)
- 第六章 面向对象的程序设计 JavaScript高级程序设计
- 第六章 面向对象的程序设计(二) JavaScript高级程序设计
- 《JavaScript高级程序设计》读书笔记--6-面向对象的程序设计
- JavaScript高级程序设计【面向对象-创建对象】
- JavaScript高级程序设计【面向对象-属性类型】
- JavaScript高级程序设计【面向对象-继承】
- 《JavaScript高级程序设计》读书笔记(三):面向对象
- JavaScript学习--Item37 面向对象高级程序设计
- JavaScript高级程序设计笔记之面向对象
- 你不知道的JavaScript--Item37 面向对象高级程序设计
- JavaScript高级程序设计笔记-面向对象的编程
- JavaScript高级编程(二)-面向对象程序设计
- 《Javascript高级程序设计》面向对象程序设计学习笔记
- 清华大学2002年机试-有多少不同的面值组合?-1072
- Quartz基础篇(三)Scheduler模块
- 算法系列——Spiral Matrix II
- Unity 5实战 使用C#和Unity开发多平台游戏pdf
- 几个大公司网页CSS初始化
- JavaScript高级程序设计(面向对象的程序设计)
- Qt5.9.1 qmake中文手册(一)
- 最长上升子序列II
- redis缓存技术
- 控制台程序的中文输出乱码问题,printf,wprintf与setlocale
- c++学习-std::list
- 技术,是不是越新越好?
- html页面中iframe嵌套页面的父页面和子页面js方法互相调用
- js对于鼠标滚轮事件的监听