JavaScript高级程序设计读书笔记(第六章)(一)

面向对象的程序设计

ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。

属性类型

对象包括四个属性类型:

  • [[Configurable]]:表示可以使用delete 操作符删除属性,
  • [[Enumerable]]:表示可以用for-in循环属性,
  • [[Writable]]:表示能否修改属性,
  • [[Value]]:包含属性的数据值。
    要修改属性默认的特性,必须使用ECMAScript 5 Object.defineProperty()方法。这个方法接收三个参数:属性所在的对象、属性的名字和一个描述符对象。。其中,描述符(descriptor)对象的属性必须是:configurable、enumerable、writable 和value。
var person = {};
Object.defineProperty(person, "name", {
    writable: false,//设置不可修改属性
    value: "Tom"
});
alert(person.name); //"Tom"
person.name = "Jake";
alert(person.name); //"Tom"
//配置configurable属性:
var person = {};
Object.defineProperty(person, "name", {
    configurable: false,
    value: "Tom"
});
alert(person.name); //"Tom"
delete person.name;//这里删除不会生效
alert(person.name); //"Tom"

注意:一旦把属性定义为不可配置的,就不能再把它变回可配置了。此时,再调用Object.defineProperty()方法修改除writable 之外的特性,都会导致错误。

定义多个属性,可以使用方法:Object.defineProperties()方法,利用这个方法可以通过描述符一次定义多个属性,这个方法接收两个对象参数:第一个对象是要添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应。

var person = {};
Object.defineProperties(person,{
    name:{value:'Tom'},
    age:{value:24}
})

读取对象属性:
Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符。这个方法接收两个参数:属性所在的对象和要读取其描述符的属性名称。

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.edition += newValue - 2004;
            }
        }
    }
});
var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
alert(descriptor.value); //2004
alert(descriptor.configurable); //false
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员青戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值