【问题标题】:Object.defineProperties nestedObject.defineProperties 嵌套
【发布时间】:2019-09-03 21:29:17
【问题描述】:

mozilla为例,这里是Object.defineProperties的简单案例

const object1 = {};

Object.defineProperties(object1, {
  property1: {
    value: 42,
    writable: true
  },
  property2: {}
});

如果我想做一个嵌套的,比如

const object1 = {};

Object.defineProperties(object1, {
  nested: {
    property1: {
      value: 42,
      writable: true
    },
    property2: {}
  }
});

这显然不起作用,但希望它描绘了我想要的。

【问题讨论】:

  • 您可以在这种情况下使用Object.defineProperty Ref MDN

标签: javascript object ecmascript-6


【解决方案1】:

defineProperties 只能传递您想要添加属性的现有对象,并且它只会在该对象上直接定义属性。没有办法提前定义父对象,以便在嵌套属性上调用 defineProperties

const object1 = {nested: {}};

Object.defineProperties(object1.nested, {
  property1: {
    value: 42,
    writable: true,
    enumerable: true
  },
  property2: {
    enumerable: true
  }
});
console.log(object1);

【讨论】:

  • 如果我想在 function.prototype 上定义属性怎么办?如,我希望MyClass.prototype.nested 获得这些新方法/字段
  • 只需提前定义nested属性:MyClass.prototype.nested = {},然后使用defineProperties
  • 所以我正在使用github.com/michaelolof/typescript-mix 模块,我正在尝试修改它,以便当我使用@use 时,我实际上可以在不同的键上定义mixin,而我无法完成
  • 问题是我这样做时范围丢失了
猜你喜欢
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多