JS-面向对象-对象的特性-禁止对象扩展 / 对象的特性-封印对象 / 对象的特性-冻结对象

对象的特性-禁止对象扩展


<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>

        var obj1 = {
            firstName: '赵四',
            lastName: '尼古拉斯'
        };

        // 检测对象是否可扩展,true 表示可扩展,false 表示不可扩展
        console.log(Object.isExtensible(obj1));  // true

        // 禁止对象扩展
        Object.preventExtensions(obj1)

        // 检测对象是否可扩展,true 表示可扩展,false 表示不可扩展
        console.log(Object.isExtensible(obj1));  // false

        // 为 obj1 添加新属性,此时添加不上
        obj1.age = 20;

        console.log(obj1)

        
    </script>
</body>

</html>

对象的特性-封印对象


<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>

        var obj1 = {
            firstName: '赵四',
            lastName: '尼古拉斯'
        };

        // 检测对象是否可扩展,true 表示可扩展,false 表示不可扩展
        // console.log(Object.isExtensible(obj1));  // true

        // 检测对象是否是被封印的,true 表示已被封印,false 表示未被封印
        console.log(Object.isSealed(obj1));  // false

        // 封印对象
        Object.seal(obj1);

        // 检测对象是否是被封印的,true 表示已被封印,false 表示未被封印
        console.log(Object.isSealed(obj1));  // true

        // 检测对象是否可扩展,true 表示可扩展,false 表示不可扩展
        console.log(Object.isExtensible(obj1));  // false

        // 不可扩展
        obj1.age = 20;

        // 由于被封印对象的所有属性的 configurable 特性都被设置成 false,因此不能删除任何属性。
        delete obj1.firstName;

        // 可以修改已有属性,writable: true
        obj1.firstName = '刘能';

        // 可以遍历已有属性,enumerable: true
        for (var key in obj1) {
            console.log(key)
        }

        // 被封印对象的特点:
        // 1. 不可扩展新属性
        // 2. 不能删除已有属性
        // 3. 可以修改已有属性
        // 4. 可以遍历已有属性

        console.log(obj1)

        
    </script>
</body>

</html>

对象的特性-冻结对象


<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>

        var obj1 = {
            firstName: '赵四',
            lastName: '尼古拉斯'
        };

        // 检测对象是否被冻结,true 表示已被冻结,false 表示未被冻结
        console.log(Object.isFrozen(obj1));  // false

        // 冻结对象
        Object.freeze(obj1)

        // 冻结之后,再次检测对象是否被冻结
        console.log(Object.isFrozen(obj1));  // true

        // 冻结之后,再次检测对象是否被封印
        console.log(Object.isSealed(obj1));  // true

        // 冻结之后,再次检测对象是否能扩展
        console.log(Object.isExtensible(obj1));  // false

        

        // 不可扩展
        obj1.age = 20;

        // 由于冻结对象的所有属性的 configurable 特性都被设置成 false,因此不能删除任何属性。
        delete obj1.firstName;

        // 不可修改已有属性,writable: false
        obj1.firstName = '刘能';

        // 可以遍历已有属性,enumerable: true
        for (var key in obj1) {
            console.log(key)
        }

        // 被冻结对象的特点:
        // 1. 不可扩展新属性
        // 2. 不能删除已有属性
        // 3. 不可修改已有属性
        // 4. 可以遍历已有属性

        console.log(obj1)

        
    </script>
</body>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值