【javascript】 Reflect.defineProperty() 与 Object.defineProperty() 【更新中】

前言

平常添加对象的自定义方法或者属性,都是直接无法监听成功还是失败,一般是知道添加的属性或者方法都是明确。这个东西还能做双向绑定了。

Reflect.defineProperty() 与 Object.defineProperty()

两个是一样的,都是直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。唯一不同在于返回 Boolean 值。

Reflect.defineProperty()

Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。defineProperty()这个是静态方法。允许精确添加或修改对象上的属性。IE和欧朋不支持。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty

语法

Reflect.defineProperty(target, propertyKey, attributes);
// 参数说明
/*
    target:要被添加属性的目标对象。
    propertyKey:要定义或修改的属性的名称。
    attributes:要定义或修改的属性的描述。value是固定的,需改或者添加属性的值。
*/

// 返回值
// 返回的类型是Boolean 值。是指示了属性是否被成功定义。

如果目标不是 Object,抛出一个 TypeError。

案例

添加或者修改对象方法。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script type="text/javascript">
        // 1、定义一个空的对象。
        var obj = {};
        // 2、将空的对象修改或者添加属性name。
        var ss = Reflect.defineProperty(obj,"name",{value:"我是现在name属性的值"}); // 还可以这摸写:var ss = Reflect.defineProperty(obj,["name"],{value:"我是现在name属性的值"}); 第二个参数可以填数组,但是只能选择第一个。
        // 3、打印出 obj的对象的name值。
        console.log(obj.name);

        // 4、Reflect.defineProperty方法返回布尔值,可以知道是否知道属性或者方法添加成功
        if(ss){
            // 添加或修改成功,返回为真
            console.log("添加或者修改成功");
        }else {
            // 修改失败后,返回为假
            console.log("失败");
        }
    </script>
</body>
</html>
注意

既然是obj对象的话,

// 对象有:函数、数组、json、new Object()
var obj = function () {};
var ss = Reflect.defineProperty(obj,"name",{value:"我是现在name属性的值"});
console.dir(ss.name);

Object.defineProperty()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值