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

+0

вы, вероятно, не должны использовать объект имени переменной, так как это зарезервированное слово –

+0

На самом деле он должен работать. И он работает, если вы проверите его в консоли. Вы должны использовать '{}'. В любом случае массивы также являются объектами, поэтому проблема может быть в другом месте. – dfsq

ответ

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

Смежные вопросы