【问题标题】:JavaScript nested object default valueJavaScript 嵌套对象默认值
【发布时间】:2014-08-12 05:24:17
【问题描述】:

所以如果我有一个像这样定义的对象:

var object = {
    prop1: 'val1',
    prop2: 'val2',
    prop3: {
         subprop1: 'subval1',
         subprop2: 'subval2',
         subprop3: 'subval3'
    }
}

我想知道是否有办法设置“默认”值,所以如果我打电话:

object.prop3

我不想得到:

Object {subprop1: "subval1", subprop2: "subval2", subprop3: "subval3"} 

相反,我想:

defaultsubval

任何帮助将不胜感激。

【问题讨论】:

  • 您到底想达到什么目的?是否要实现自定义属性 getter?
  • @p.s.w.g 我更喜欢尽可能内联的东西......例如,如果我能这样做,我会很高兴: var object = { prop: 'defaultval' { subprop: 'subval' } };但我知道我不能那样做……
  • 不,这不能做。当您访问object.prop3 时,它怎么会知道您是在默认情况下停在那里还是要实际从对象中获取属性?如果您确实继续使用另一个属性,它应该来自对象还是您返回的默认值?
  • @cookiemonster 也许向前看,看看是否有对子对象的请求?我真的不知道怎么写,如果有的话。
  • @LeinardoSmtih:它怎么知道对object.prop3结果的属性请求应该来自默认值或子对象?我只是在解释为什么不能这样做。

标签: javascript json nested default-value javascript-objects


【解决方案1】:

正如上面提到的 cookie monster 和 jfriend00。仅使用对象符号是不可能的。 Javascript 只是不能那样工作。但是,我通过Getting the name of a requested subobject找到了另一种做同样事情的方法

【讨论】:

    【解决方案2】:

    下面是使用Symbol's toPrimitive 的方法:

    const myTheme = {
      prop1: 'val1',
      prop2: 'val2',
      color: {
        darker: 'orange',
        lighter: 'white'
      }
    }
    
    Object.defineProperty(myTheme.color, Symbol.toPrimitive, {
      value: () => 'yellow'
    });
    

    所以,我们得到了类似的东西:

    console.log('primary color: ' + myTheme.color.darker) // returns "primary color: orange"
    console.log('primary color: ' + myTheme.color) // returns "primary color: yellow"
    

    【讨论】:

      猜你喜欢
      • 2020-12-07
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2021-02-10
      • 1970-01-01
      • 2019-03-31
      相关资源
      最近更新 更多