JS 物件属性:属性的特徵 DAY68

Object.defineProperty
定义物件属性,调整属性特徵(请牢记!!)

// 定义物件属性,调整属性特徵
Object.defineProperty

那特徵有哪些呢??

  1. 值(value)
  2. 可否写入(writable)
  3. 可否被删除(configurable)
  4. 可否被列举(enumerable)

改值

var family = {
    a: 1,
    b: 2,
    c: 3,
}
console.log(family); // 1 2 3
// Object.defineProperty(物件,属性,参数)           
Object.defineProperty(family,'a',{
    // 预设都为 true
    value: 4,
    writable : true,
    configurable : true,
    enumerable : true,
})
console.log(family); // 4 2 3

可否写入

var family = {
    a: 1,
    b: 2,
    c: 3,
}
console.log(family); // 1 2 3

Object.defineProperty(family,'a',{
    writable : false, // 不可写入
    configurable : true,
    enumerable : true,
})
family.a = 10; // 静默错误 
console.log(family); // 因不可写入 所以一样为 1 2 3

可否被删除

var family = {
    a: 1,
    b: 2,
    c: 3,
}
console.log(family); // { a : 1 , b : 2 , c : 3}

Object.defineProperty(family,'b',{
    configurable : false, // 不可删除
})
delete family.a;
console.log(family); // { b : 2 , c : 3}
delete family.b;
console.log(family); // { b : 2 , c : 3}

可否被列举

var family = {
    a: 1,
    b: 2,
    c: 3,
}

Object.defineProperty(family,'c',{
    enumerable : false, 
})
for(var key in family){
    console.log('列举'+key); // 列举 a 列举 b
}

浅层保护
Object.defineProperty 只能做到浅层保护

var family = {
    a: 1,
    b: 2,
    c: 3,
}

Object.defineProperty(family,'d',{
    value: {},
    writable : false, 
})
family.d = 1; 
console.log(family); // {} , d 一样为空物件 
// 但禁止写入只限制 d 此属性
// 由於物件有传参考的特性 所以我们可以针对里面的值来做设定
var family = {
    a: 1,
    b: 2,
    c: 3,
}

Object.defineProperty(family,'d',{
    value: {},
    writable : false, 
})
family.d = 1; 
console.log(family); // {} , d 一样为空物件 
// 但禁止写入只限制 d 此属性
// 由於物件有传参考的特性 所以我们可以针对里面的值来做设定
family.d.a = 10;
console.log(family);  // d: { a : 10}  

一次定义大量属性

var family = {
    a: 1,
    b: 2,
    c: 3,
}
Object.defineProperties(family,{
    a:{
        writable: false,
    },
    b:{
        configurable: false,
    },
    c:{
        enumerable: false,
    }
})

那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷/images/emoticon/emoticon41.gif


<<:  Get Support for Frozen FireStick Issue Dial 1877-943-5444

>>:  我遇到的RWD网页难题

D3JsDay08做为视觉化图表的燃料,从网路撷取档案的资料—fetch Data

浅谈原始码 D3包装了Javascript的fetchAPI来撷取资料我们这里可以看到D3Js的原始...

回归模型的衡量标准:MSE. RMSE. MAE. MPE

在建立多个regression models後,我们常要选择一个指标来衡量模型好坏,今天来聊聊各个不...

[Day2] 时间序列资料转换方法

昨天讲了时间序列的 4 大属性拆解,今天我们介绍三种时间序列资料的转换方式, 它的目的是能够让隐藏在...

Android Studio初学笔记-Day18-Intent+Bundle

Intent+Bundle Intent常用於画面的跳转,也就是Activity之间的切换,而在In...

Day03:小姐,你手上那是什麽?

昨天提到了一个奇怪的现象: byte num = 128; 如上撰写,你的IDE将会在128底下亮出...