2013-03-16 148 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