2

这是我正在尝试做的一个非常蹩脚的例子。这段代码有效。

var Love = {
  name: 'Johnny',
  kiss: function (girl){
    alert(this.name + " kissed " + girl );
  }
};

Love.name = "Chris";
Love.kiss("Becky");

我首先重新分配了name的属性,然后调用发送我的参数的方法

我真正想做的是在调用方法时使用 JSON 设置“名称”属性。我发誓我在某个地方看到过它,但我无法弄清楚。所以理想情况下它看起来像这样。

Love.kiss({
  name: 'Chris'},
  "Becky");

甚至是这样的。

var Love = {
  Guy: 'Johnny',
  Girl: 'Mallory',
  kiss: function (){
    alert(this.Guy + " kissed " + this.girl);
  }
};

Love.kiss({
  Guy: 'Chris',
  Girl; 'Becky'});

同样,我知道这是一个非常愚蠢的例子,但这个概念有一个我想使用的应用程序。

4

4 回答 4

2

无论如何,您都想将对象文字(不是 JSON!)传递给函数,那么为什么不直接使用它呢?

function kiss(obj) {
    alert(obj.Guy + " kissed " + obj.Girl);
}

kiss({
    Guy: 'Chris',
    Girl: 'Becky'
});

为什么还要使用Love对象?

于 2012-06-28T03:07:32.030 回答
2

只需遍历作为参数传入的对象的键并将它们分配给this

var Love = {
    Guy: 'Johnny',
    Girl: 'Mallory',
    kiss: function(opts) {
        for (var k in opts) {
            this[k] = opts[k];
        }
        alert(this.Guy + " kissed " + this.Girl);
    }
};

Love.kiss({
    Guy: 'Chris',
    Girl: 'Becky'
});​  // -> alert('Chris kissed Becky')

看演示

于 2012-06-28T03:07:39.487 回答
0
var Love = {
  Guy: 'Johnny',
  Girl: 'Mallory',
  kiss: function( data ) {
    this.Guy = data.Guy;
    this.Girl = data.Girl;
    alert(this.Guy + " kissed " + this.Girl);
  }
};

Love.kiss({
  Guy: 'Chris',
  Girl: 'Becky'
});

这是你想要达到的目标吗?

于 2012-06-28T03:06:56.257 回答
0
var Love = {
  Guy: 'Johnny',
  Girl: 'Mallory',

  kiss: function (obj){
    // if you want default values you can use ||
    this.Guy = obj.Guy || this.Guy;
    this.Girl = obj.Girl || this.Girl;

    alert(this.Guy + " kissed " + this.Girl);

    // or change the code above to the following if you don't want to store new values
    var guy = obj.Guy || this.Guy,
        girl = obj.Girl || this.Girl;

    alert(guy + " kissed " + girl);
  }
};

Love.kiss({
  Guy: 'Chris',
  Girl: 'Becky'
});
于 2012-06-28T03:22:30.087 回答