在调用依赖于它的方法时设置javascript对象属性

时间:2012-06-28 03:02:44

标签: javascript function object properties methods

这是我想要做的一个非常蹩脚的例子。这段代码可以使用。

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

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

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

我真正想做的是,在调用方法时使用JSON设置“name”属性。我发誓我已经看到它在某个地方完成了,但我无法弄明白。理想情况下它看起来像这样。

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 个答案:

答案 0 :(得分:2)

你想要将对象文字(而不是JSON!)传递给函数,那么为什么不直接使用呢?

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

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

为什么要使用Love对象?

答案 1 :(得分: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')

See demo

答案 2 :(得分: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'
});

这是你想要实现的目标吗?

答案 3 :(得分: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'
});