javascript 高级程序设计 九

it2022-05-09  41

JS 面向对象的程序设计思想(1)深入理解JS对象

1、js的中没有OO语言中的'类'的概念。ECMAjs中把对象定义为:‘无序属性的集合,其属性可以包含基本值,对象或函数’。

2、ECMAScript中为对象定义了一组只有内部可以使用的属性,这些属性的目的是为了描述外部定义的属性的各种特征。这些特征是为了实现JS引擎用的,

因此再JS中不能不能直接访问它们。为了表示这个特性是内部值,把他们放到了两对中括号中,例如[[Enumerable]]。

  数据属性:

    [[Configurable]]:可配置性,默认为true,描述这个数据属性是否可以被delete,从而重新定义属性、描述了能否修改属性的特性,能否把属性改为访问器属性

    [[Enumerable]]:可遍例(for-in)性,默认为true。

    [[Writable]]:可修改性。默认为true

    [[Value]]::在此保存数据。默认为undefined.

 

var person = {}; Object.defineProperty(person, "name", {//要修改属性的默认特性。必须使用Object.definedProperty() writable: false; value: 'Nicholas' }); alert(person.writable);//Nicholas person.name = 'wang'; alert(person.writable);//Nicholas

 

  

 

  访问器属性:(不包含数据值,包含一对getter,setter函数)

    [[Configurable]]:可配置性,默认为true,描述这个属性是否可以被delete,从而重新定义属性、描述了能否修改属性的特性,能否把属性改为访问器属性

    [[Enumerable]]:可遍例(for-in)性,默认为true。

    [[Get]]:在读取属性时调用的函数。默认值为undefined

    [[Set]]:在写入属性时调用的函数。默认值为undefined

 

var person={ _age = 10, addAge = 1 }; Object.defineProperty(person, 'age',{ get: function(){ return this._age; }, set: function(newValue){ if(newValue > 10){ _age = newValue; addAge = newValue - 10; } } }); person.age = 12; alert(person.addAge);//2

 

  除了一次性修改一个属性的特性方法:Object.defineProperty();还有另一个更加强大的方法: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.edtion += newValue - 2004; } } } }); book.year = 2005; alert(book.edition);//2

  

 

转载于:https://www.cnblogs.com/wang985850293/p/5387029.html

相关资源:JavaScript高级程序设计电子书

最新回复(0)