ES5扩展的两个方法

目录

1. Object.create(prototype, [descriptors])

2. Object.defineProperties(object, descriptors)


1. Object.create(prototype, [descriptors])

作用: 以指定对象为原型创建新的对象

为新的对象指定新的属性, 并对属性进行描述

value: 指定值 -

writable: 标识当前属性值是否是可修改的, 默认为false

configurable: 标识当前属性是否可以被删除 默认为false

enumerable: 标识当前属性是否能用for in 枚举 默认为false

var obj = {
    username: 'damu',
    age: 30
};
var obj1 = {};
obj1 = Object.create(obj, {
    sex: {
        value: '男',
        writable: true,
        configurable: true,
        enumerable: true
    }

});
console.log(obj1.sex) // 男
obj1.sex = '女';
console.log(obj1.sex) // 女
console.log(obj1) // {sex:'女'}
for (var i in obj1) {
    console.log(i) // sex   username    age
}

2. Object.defineProperties(object, descriptors)

作用: 为指定对象定义扩展多个属性

get: 用来获取当前属性值得回调函数

set: 修改当前属性值得触发的回调函数, 并且实参即为修改后的值

存取器属性: setter, getter一个用来存值, 一个用来取值

var obj2 = {
    firstName: 'kobe',
    lastName: 'bryant'
}
Object.defineProperties(obj2, {
        fullName: {
            get: function() { // 获取扩展属性的值,
                return this.firstName + ' ' + this.lastName
            },
            set: function(data) { // 监听扩展属性,当扩展属性发生变化的时候会自动调用,自动调用后悔将变化的值作为实参传进来
                console.log('set()', data) // set() tim duncan
                    // console.log(data)
                var names = data.split(' ');
                this.firstName = names[0];
                this.lastName = names[1];
            }
        }
    })
    // console.log(obj2)
console.log(obj2.fullName) // kobe bryant
obj2.fullName = "tim duncan"; //会触发 set 
console.log(obj2.fullName); // tim duncan

对象本身的两个方法

get propertyName(){} 用来得到当前属性值的回调函数

set propertyName(){} 用来监视当前属性值变化的回调函数

var obj3 = {
    firstName: 'curry',
    lastName: 'stephen',
    get fullName() {
        return this.firstName + ' ' + this.lastName
    },
    set fullName(data) {
        var names = data.split(' ');
        this.firstName = names[0];
        this.lastName = names[1]
    }
}
console.log(obj3);
console.log(obj3.fullName) // curry stephen
obj.fullName = 'kobe bryant';
console.log(obj.fullName) // kobe bryant

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值