2

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

任何人?可能很简单,对吧?:-) 谢谢!

4

1 回答 1

1

使用deepextend和嵌套对象:

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

于 2012-12-07T04:41:23.410 回答