javascript 高级程序设计 九

这篇博客深入探讨了JavaScript中对象的属性特性,包括数据属性和访问器属性。数据属性涵盖[[Configurable]]、[[Enumerable]]、[[Writable]]和[[Value]],而访问器属性则涉及[[Get]]和[[Set]]。文章还提到了修改对象属性特性的方法,如Object.defineProperty()和Object.defineProperties()。
摘要由CSDN通过智能技术生成
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

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值