Javascript高级程序设计——面向对象之理解对象

在面向对象语言中都有类的概念,经过类来建立具备属性方法对象。而ECMAScript中没有类的概念,ECMAScript中定义了对象:无需属性的集合,其属性值能够包含基本值、对象、或者函数。 javascript

在Javascript中每一个对象都是基础引用类型来建立的,能够是原生类型也能够是自定义的类型。 java

    自定义对象最简单的方法就是经过建立Object类型的实例,而后为这个实例添加属性和方法。 浏览器

var Person = new Object(); 函数

Person.name = "yangxunwu"; this

Person.age = 24; spa

Person.sayName = function(){ 对象

alert(this.name); ip

}; 字符串

 

咱们这里建立了一个object类型的一个名为Person的对象,有两个属性name和age,一个方法sayName; get

属性类型:

对象拥有属性,这些属性也有一些特性,好比Configurable、Enumerable、Writable、Value。在javascript不能直接访问这些特性,需经过对象的方法访问,好比Object.defineProperty()

数据属性:数据属性包含这个数据值的位置,在这个位置能够读取和写入值。数据属性有四个特性:

Configurable:可否经过delete删除属性从而从新定义属性,可否修改属性的特性,可否把属性修改成访问器属性。

Enumerable:可否经过for-in循环返回属性。

Writable:可否修改属性值。

Value:保持这个属性的数据值。

var Person = {

        name: "yangxunwu",

}

Object.defineProperty(Person, "age", {

        writable: false,

        value: 24

})

    定义一个Person对象,并设置一个不可写的值为24的age属性。注意定义属性时的属性字符串形式。当把属性的configurable特性设置为false时,没法在次修改,只能使用writable。

访问器属性:    访问器属性不包含值,包含一对getter和setter函数,访问访问器属性时调用getter函数,这个函数返回有效的值,写入访问器属性时调用setter函数,并传入新值。访问器属性包含四个特性:

    Configurable:可否经过delete删除属性从而从新定义属性,可否修改属性的特性,可否把属性修改成数据属性。

Enumerable:可否经过for-in循环返回属性。

Get:读取数据时调用的函数。默认undefined

Set:写入属性时调用的函数。默认undefined

var Person = {

_year : 1992,

age : 0

}

 

Object.defineProperty(Person, "year", {

get: function(){

     return this._year;

},

 

set: function(newValue){

if(newValue > 1992){

     this._year = newValue;

this.age = newValue - 1992;

}

}

})

    

给Person对象,定义了一个访问器属性year,访问时返回对象的__year属性,赋值时会调用set函数,而后同时设置age的值。

部分浏览器也能够经过_defineGetter__和 __defineSetter__来设置访问器特性。也能够设置多个特性Object.defineProperties()。要读取一个属性的特性,能够经过给定属性的描述符。

    Object.getOwnPropertyDescriptor()方法,返回一个对象,包含各类特性的属性,能够针对BOM和DOM对象来使用。

    ECMAScript定义这些特性的目的是为了实现Javascript引擎用的

相关文章
相关标签/搜索