【问题标题】:Accessing an object property WITHIN another object访问另一个对象内的对象属性
【发布时间】:2012-12-07 04:39:15
【问题描述】:

我在 jsFiddle 中设置了这个问题:http://jsfiddle.net/GeekStocks/WHtCv/

我正在编写一个 jQuery 插件实例方法,但终其一生都找不到正确的语法来覆盖嵌套对象属性的值!这是代码(来自 jsFiddle):

jQuery.fn.test = function(options) {
  var defaults = {
    settings: {
      height: 0, // must be computed
      width: 0,  // must be computed
      scale: 0.20 // percentage of the >> height <<
    },
    simpleVar: "Hola hombre." // default is masqualine
  };

  var opts = jQuery.extend(defaults, options); // override defaults

  this.val(opts.simpleVar + "\nScale: " + opts.settings.scale);
};

现在,如果我想覆盖“simpleVar”,这很容易:

$("#t1").test({simpleVar: "Hola senora."});

但是改变“设置”对象的“比例”属性让我望而却步......

$("#t2").test({"settings.scale": 0.86}); // uh, nope!

有人吗?可能很简单,对吧? :-) 谢谢!

【问题讨论】:

    标签: javascript object syntax properties


    【解决方案1】:

    使用deep extend,并嵌套对象:

    jQuery.fn.test = function(options) {
        // snip...
    
        //                       ↓↓↓↓
        var opts = jQuery.extend(true, defaults, options);
    
        this.val(opts.simpleVar + "\nScale: " + opts.settings.scale);
    };
    
    // then
    
    $("#t2").test({settings: {scale: 0.86}});
    

    http://jsfiddle.net/mattball/LXTAm

    【讨论】:

    • 好吧,语法没那么简单! (实际上,还不错)。谢谢你的帮助马特。 -GS
    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2019-10-18
    相关资源
    最近更新 更多