ECMAScript面向对象(一)

1.什么是对象?面向对象又是什么?

对象:将现实中的对象,通过用一组无序数据和一组操作方法来对其进行抽象的描述出来,作为一个相互依存的整体。

function Annimals(){
    this.class="Cat";
    this.voice="miao";
    this.eat=function(){console.log('eat.......');};
    this.run=function(){console.log('run.......');};
}
View Code

面向对象:基于对象进行程序设计,是程序开发的一种程序设计方法。

2.对象的属性

这里说的属性其实就是对象中的数据以及两个特殊的方法。将它们划分为:数据属性、访问器属性。

  • 数据属性

 —用于保存数据值。ECMA中对数据属性定义了4个描述其行为的特征

  1. [[ Configurable ]]:能否用delete删除属性,然后重写定义、能否修改属性的特性、能否把属性修改为访问器属性。
  2. [[ Enumerable]]:能否通过for-in返回属性。
  3. [[ Writable]]:是否能修改属性的值。
  4. [[ Value]]:属性的数据值。(默认值:undefined)

  一般由程序员添加的自定义属性它们的默认值都是true。ES5中可以通过Object.defineProperty()方法修改一个数据属性的行为特征。

var person={};
Object.defineProperty(person, "name",{
    writable:false,
    value:"JayChou"
});
View Code
  • 访问器属性

其实是对私有数据进行进一步封装,提供一个特殊的属性对对象的私有数据属性进行访问和操作。访问器属性不包含数据值,包含一对getter和seter函数。

访问器属性有如下特征:

  1. [[ Configurable ]]:能否用delete删除属性,然后重写定义、能否修改属性的特性、能否把属性修改为访问器属性。
  2. [[ Enumerable]]:能否通过for-in返回属性。
  3. [[Get]]:读取私有属性时候调用的接口。(默认值:undefined)
  4. [[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;
 }
});
View Code
原文地址:https://www.cnblogs.com/fanglylu/p/6821408.html