2013-03-16 129 views
0

我无法将值传递给对象的方法。当我打电话给它时,我希望能够将一个变量传递给一个对象方法,但是我似乎无法弄清楚这是如何完成的。将变量传递给javascript方法

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

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"

后来我读了那个绑定可能是答案,但是这似乎并没有工作

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

+0

我觉得你在这里混合概念,加上'object'不是实际的对象'{}'是'数组[]'。你正在尝试构造一个构造函数?如果你阅读'bind',你会发现它并不是那样使用,'bind'只是改变'this'的上下文。 – elclanrs 2013-03-16 06:02:41

+0

你可能不应该使用变量名称对象,因为它是一个保留字 – 2013-03-16 06:04:14

+0

其实它应该工作。如果你在控制台中测试它,它就可以工作。你应该使用'{}'。无论如何,数组也是对象,所以问题可能在别的地方。 – dfsq 2013-03-16 06:04:57

回答

0

你的方法是定义一个数组[],而不是一个对象{}。虽然你应该能够把方法到阵列上就好了,我觉得这样的事情是你在找什么

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用于预设此函数的一个值,也用于咖喱参数。这是做作,但是,例如:

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

+0

我还没有解决我的问题,但你的回答是最好的,仍然试图调试我的问题,因为它是几个深层次的范围内,可能会发布一个新的问题,当我剔除真正的问题 – JSGamer 2013-03-16 06:52:08