在另一个对象中访问对象属性

时间:2012-12-07 04:39:15

标签: javascript object syntax properties

我在这里用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!

任何?可能是简单的事,对吧? :-)谢谢!

1 个答案:

答案 0 :(得分: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