1.什么是对象?面向对象又是什么?
对象:将现实中的对象,通过用一组无序数据和一组操作方法来对其进行抽象的描述出来,作为一个相互依存的整体。
function Annimals(){ this.class="Cat"; this.voice="miao"; this.eat=function(){console.log('eat.......');}; this.run=function(){console.log('run.......');}; }
面向对象:基于对象进行程序设计,是程序开发的一种程序设计方法。
2.对象的属性
这里说的属性其实就是对象中的数据以及两个特殊的方法。将它们划分为:数据属性、访问器属性。
- 数据属性
—用于保存数据值。ECMA中对数据属性定义了4个描述其行为的特征
- [[ Configurable ]]:能否用delete删除属性,然后重写定义、能否修改属性的特性、能否把属性修改为访问器属性。
- [[ Enumerable]]:能否通过for-in返回属性。
- [[ Writable]]:是否能修改属性的值。
- [[ Value]]:属性的数据值。(默认值:undefined)
一般由程序员添加的自定义属性它们的默认值都是true。ES5中可以通过Object.defineProperty()方法修改一个数据属性的行为特征。
var person={}; Object.defineProperty(person, "name",{ writable:false, value:"JayChou" });
- 访问器属性
其实是对私有数据进行进一步封装,提供一个特殊的属性对对象的私有数据属性进行访问和操作。访问器属性不包含数据值,包含一对getter和seter函数。
访问器属性有如下特征:
- [[ Configurable ]]:能否用delete删除属性,然后重写定义、能否修改属性的特性、能否把属性修改为访问器属性。
- [[ Enumerable]]:能否通过for-in返回属性。
- [[Get]]:读取私有属性时候调用的接口。(默认值:undefined)
- [[Set]]:设置私有属性时候调用的接口。(默认值:undefined)
同样ES5中可以通过Object.defineProperty()和 Object.getOwnPropertyDescriptor()方法修改或读取一个数据属性的行为特征。(IE9+)
var book={ _year:2002, edition:1 }; Object.defineProperty(book,"year",{ //get和set定义的话要一起定义,不然定义了一个另外一个不起作用 get:function(){ return this._year; }, set:function(y){ this._year=y; } });