【Javascript】Object.defineProperty()

13 篇文章 0 订阅

语法:

Object.defineProperty(obj, prop, descriptor)

返回参数中的obj。
obj:要定义的对象;
prop:要定义或修改的属性的名称(或者Symbol);
descriptor:要定义或修改的属性描述符。

descriptor里有以下几种选项:

  1. configurable
  2. enumerable
  3. value
  4. writable
  5. get
  6. set

Javascript对象有两种描述符:数据描述符和存取描述符。
数据描述符没有get和set选项,存取描述符没有value和writable选项。
如果一个描述符没有get&set也没有value&writable,则被默认为数据描述符。
如果一个描述符同时有get|set和value|writable,则会产生一个异常。

Uncaught TypeError: Invalid property descriptor. Cannot both specify
accessors and a value or writable attribute, #
at Function.defineProperty ……

数值描述符eg:

const object1 = {};


Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});


object1.property1 = 77;
// throws an error in strict mode


console.log(object1.property1);
// expected output: 42

存取描述符eg:

const obj = {};

Object.defineProperty(obj, "prop", {

    set(newValue) {
        propValue = newValue;
        this._prop = newValue; // 用于get获取数值
        console.log("设置当前值为" + newValue)
    },
    get() {
        console.log("获取到当前值" + this._prop)
        return this._prop
    }
})


obj.prop = 88; // 设置当前值为88

console.log(obj.prop); // 获取到当前值88
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值