【问题标题】:pass variable to javascript method将变量传递给javascript方法
【发布时间】:2013-03-16 05:59:57
【问题描述】:

我无法将值传递给对象的方法。我希望能够在调用对象方法时将变量传递给它,但是我似乎无法弄清楚这是如何完成的。

注意:我需要通过引用传递这些值,但是我使用字符串来保持示例简单,在我的实际代码中我传递对象。

function makeObject(){
    var object = [ ];
    object.parameter1 = 0;
    object.parameter2 = "text";
    object.method = function (var1, var2){
        console.log(var1+" "+var2);
    }
    return object;
}

var myObject = makeObject();

这就是我期望的工作方式

myObject.method("hello", "world"); //console returns "undefined undefined"

我后来读到 bind 可能是答案,但这似乎不起作用

myObject.method.bind("hello", "world"); //console returns "undefined undefined"

【问题讨论】:

  • 我认为你在这里混合了概念,而且object 不是一个实际的对象{} 是一个数组[]。你正在尝试制作一个构造函数?如果您阅读bind,您会发现它并没有像那样使用,bind 只是更改了this 的上下文。
  • 你可能不应该使用变量名对象,因为它是一个保留字
  • 实际上它应该可以工作。如果您在控制台中测试它,它会起作用。你应该使用{}。无论如何,数组也是对象,所以问题可能出在其他地方。
  • 你的样品工作得很好。请验证您是否确实看到您发布的代码存在问题,如果没有 - 请对其进行编辑,以便它实际显示问题。
  • 感谢所有 cmets / 帮助,仍在苦苦挣扎,等我用完新信息后会回复

标签: javascript variables object methods


【解决方案1】:

您的方法是定义数组[],而不是对象{}。虽然您应该能够很好地将方法放入数组中,但我认为您正在寻找这样的东西

function makeObject(){
    var obj = { }; //an object literal
    obj.parameter1 = 0;
    obj.parameter2 = "text";
    obj.method = function (var1, var2){
        console.log(var1+" "+var2);
    }
    return obj;
}

还请注意,您可以内联返回​​整个对象:

function makeObject(){
    return {
      parameter1: 0,
      parameter2: "text",
      method: function (var1, var2){
        console.log(var1+" "+var2);
      }
   };
}

这是demo


另外,对于您问题的第二部分,bind 用于预先设置函数的 this 值,也用于 curry 参数。这是人为的,但是例如:

var sayIt = function(y){
    this.say(y);
};

var obj = { 
   say: function(val){ console.log(val); } 
};
var sayThat = sayIt.bind(obj, "that");
sayThat();

//logs that to console.

Demo

【讨论】:

  • 我还没有解决我的问题,但你的回答是最好的,仍在尝试调试我的问题所在,因为它的范围很广,当我排除真正的问题时可能会发布一个新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多