JS之Object.defineProperty方法

简介: JS之Object.defineProperty方法

给对象添加属性的方法有许多,这次让我为大家介绍一种给对象添加属性的静态方法吧!

语法:Objcet.defineProperty(对象的名称,“添加的键名”,{value:键值})

const obj = {name:"张三",age:18}
    // 我们给obj添加一个新属性
    Object.defineProperty(obj,"hobby",{
        value:"打篮球"
    })
    console.log(obj);

可以看到我们成功添加了一个属性

这种静态方法还可以玩

我们添加了这个属性,我们可以控制这个属性能否被修改,能否被删除,能否被循环

我为大家介绍一下以下三个方法

writable:布尔值;如果为true就是能被修改,为false不能被修改

configurable:布尔值;如果为true就是能被删除,为false不能被删除

enumerable:布尔值;如果为true就是能被循环,为false不能被循环

const obj = {name:"张三",age:18}
    // 我们给obj添加一个新属性,可修改,不可删除,不可循环
    Object.defineProperty(obj,"hobby",{
        value:"打篮球",
        writable:true,
        configurable:false,
        enumerable:false
    })
    obj["hobby"] = "踢足球"//修改成功
    delete obj["hobby"]//删除失败
    for(let k in obj) {
        console.log(obj[k]);//不能循环到hobby
    }
    console.log(obj);

getter与setter

const obj = { name: "张三", age: 18 }
    // 我们给obj添加一个新属性,可修改,不可删除,不可循环
    Object.defineProperty(obj, "hobby", {
        get() {
            console.log("获取了")
            // 返回一个篮球
            return "篮球"
        },
        set(val) {
            console.log("被修改了")
            // 修改后val为足球
            console.log(val)
        }
    })
    // 获取
    obj["hobby"]
    console.log(obj)
    // 修改后val为足球
    obj["hobby"] = "足球"
    console.log(obj)

来看第一次打印的对象

来看第二次打印的对象

我们发现hobby的属性值没有被修改

这是一个注意点

感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!

相关文章
|
1天前
|
存储 JavaScript 前端开发
史上最详细JavaScript数组去重方法(11种)
使用set和Array.from ()方法 array.from可以将set结构转成数组
19 7
|
1天前
|
JavaScript 前端开发 索引
JavaScript array 原生 reduce 方法的模拟实现
JavaScript array 原生 reduce 方法的模拟实现
8 2
|
1天前
|
JavaScript 前端开发
JavaScript 提供了多种方法来操作 DOM(文档对象模型)
【5月更文挑战第11天】JavaScript 用于DOM操作的方法包括获取元素(getElementById, getElementsByClassName等)、修改内容(innerHTML, innerText, textContent)、改变属性、添加/删除元素(appendChild, removeChild)和调整样式。此外,addEventListener用于监听事件。注意要考虑兼容性和性能当使用这些技术。
9 2
|
1天前
|
JavaScript 前端开发
在JavaScript中实现模块化开发有多种方法
【5月更文挑战第10天】JavaScript模块化开发可通过CommonJS、AMD和ES6模块实现。CommonJS适用于服务器端,使用`require`和`module.exports`处理模块;AMD(如RequireJS)用于浏览器端,依赖`require`和`define`;ES6模块提供原生支持,使用`import`和`export`。选择方式需考虑项目环境、复杂度和技术栈。
16 4
|
1天前
|
JavaScript 前端开发
JS tostring()和join()方法
JS tostring()和join()方法
8 1
|
1天前
|
存储 JavaScript 前端开发
深入了解JavaScript中的indexOf()方法:实现数组元素的搜索和索引获取
深入了解JavaScript中的indexOf()方法:实现数组元素的搜索和索引获取
9 0
|
1天前
|
JavaScript 前端开发 索引
js添加、删除、替换、插入元素的方法
js添加、删除、替换、插入元素的方法
12 0
|
1天前
|
JavaScript 前端开发
JavaScript 循环方法详解
JavaScript 循环方法详解
21 1
|
1天前
|
JavaScript 前端开发
JavaScript数字方法详解
JavaScript数字方法详解
18 0
|
1天前
|
存储 JavaScript 前端开发
JavaScript对象方法详解
JavaScript对象方法详解
16 1