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

Set a javascript object property while calling a method that relies on it

本文关键字:设置 javascript 对象 属性 方法 调用 依赖于      更新时间:2023-09-26

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

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'});

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

只需运行作为参数传入的对象的键并将它们分配给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')

查看演示

无论如何,

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

function kiss(obj) {
    alert(obj.Guy + " kissed " + obj.Girl);
}
kiss({
    Guy: 'Chris',
    Girl: 'Becky'
});

为什么还要使用 Love 对象?

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'
});

这是您要实现的目标吗?

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'
});