【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。

案例

添加或者修改对象方法。


<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()

你可能感兴趣的:(javascript,与,Obj,前端)