美文网首页
Object.defineProperty()

Object.defineProperty()

作者: 小棋子js | 来源:发表于2019-12-10 18:06 被阅读0次

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
默认情况下,使用 Object.defineProperty() 添加的属性值是不可修改的。

const object1 = {};

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

object1.property1 = 77;//在严格模式下引发错误
console.log(object1.property1);// 结果: 42;如果writable: true;则输出77
demo01 - 属性描述符默认值
属性           默认值             说明
configurable    false             描述属性是否可以被删除,默认为 false
enumerable    false           描述属性是否可以被for...in或Object.keys枚举,默认为 false
writable          false             描述属性是否可以修改,默认为 false
get           undefined       当访问属性时触发该方法,默认为undefined
set           undefined       当属性被修改时触发该方法,默认为undefined
value           undefined         属性值,默认为undefined
// demo01-default.html

// Object.defineProperty(对象,属性,属性描述符)
  var obj = {};
  console.log('obj:', obj);
  // 默认不可删除,不可枚举,不可修改
  Object.defineProperty(obj, 'name', {
    value: 'Jameswain'
  });
  console.log('obj默认值:', obj);
  delete obj.name;
  console.log('obj删除后:', obj);
  console.log('obj枚举:', Object.keys(obj));
  obj.name = '詹姆斯,韦恩';
  console.log('obj修改后:', obj);
  // 不能重新定义,会报重复定义错误: Uncaught TypeError: Cannot redefine property: name
  Object.defineProperty(obj, 'name', {
    value: '詹姆斯,韦恩'
  });
obj: {}
结果:
VM61:7 obj默认值: {name: "Jameswain"}
VM61:9 obj删除后: {name: "Jameswain"}
VM61:10 obj枚举: []
VM61:12 obj修改后: {name: "Jameswain"}
VM61:14 Uncaught TypeError: Cannot redefine property: name
    at Function.defineProperty (<anonymous>)
    at <anonymous>:14:10

从运行结果可以发现,使用Object.defineProperty()定义的属性,默认是不可以被修改,不可以被枚举,不可以被删除的。可以与常规的方式定义属性对比一下:如果不使用Object.defineProperty()定义的属性,默认是可以修改、枚举、删除的:

 const obj = {};
 obj.name = 'Jameswain';
 console.log('枚举:', Object.keys(obj));
 obj.name = '詹姆斯-韦恩';
 console.log('修改:', obj);
 delete obj.name;
 console.log('删除:', obj);
结果:
枚举: ["name"]
修改: {name: "詹姆斯-韦恩"}
删除: {}

相关文章

网友评论

      本文标题:Object.defineProperty()

      本文链接:https://www.haomeiwen.com/subject/hrwggctx.html