2013-06-04 2 views
0

Мне было интересно, можно ли вернуть несколько значений из объекта-прототипа. Мне нужно вернуть значение нескольких массивов и вызвать их позже. Ниже приведен пример моего кода. Я могу показать JSFiddle, если нужно ... Спасибо!Как вернуть несколько значений из функции объекта javascript?

EmployeeObj.prototype.showEmployee = function(emPhoto0,emPhoto01){ 
    var employeePhoto = new Array(); 
    employeePhoto[emPhoto0] = new Image(); 
    employeePhoto[emPhoto0].src = "pics/taylor.jpg"; 
    employeePhoto[emPhoto01] = new Image(); 
    employeePhoto[emPhoto01].src = "pics/roger.jpg"; 

    var showPhoto1 = employeePhoto[emPhoto0]; 
    var showPhoto2 = employeePhoto[emPhoto1]; 

    return showPhoto1; 
    return showPhoto2; 
}; 
+0

Какие значения будут иметь значения «emPhoto0» и «emPhoto01»? В 'Array' они должны быть целыми числами, если они не являются, вы должны использовать' Object'. – Bergi

+0

emPhoto0 и emPhoto1 будут называться позже, эти значения будут иметь 0 и 1 и т. Д. Для доступа к элементам массива (фотографии) –

ответ

1

Вы не можете использовать несколько return заявления в этом случае - только первый будет оцениваться, но вы можете вернуть объект или массива и доступ, что вы хотели от этого.

EmployeeObj.prototype.showEmployee = function (emPhoto0, emPhoto01) { 
    var employeePhoto = new Array(); 
    employeePhoto[emPhoto0] = new Image(); 
    employeePhoto[emPhoto0].src = "pics/taylor.jpg"; 
    employeePhoto[emPhoto01] = new Image(); 
    employeePhoto[emPhoto01].src = "pics/roger.jpg"; 
    var showPhoto1 = employeePhoto[emPhoto0]; 
    var showPhoto2 = employeePhoto[emPhoto1]; 
    return {'showPhoto1': showPhoto1, 'showPhoto2': showPhoto2}; 
    // or [showPhoto1, showPhoto2]; 
}; 

Вы бы тогда доступ

var em = new EmployeeObj(/* ... */), 
    photos = em.showEmployee(/* ... */); 
photos['showPhoto1']; // or photos['showPhoto2'] 
// or photos[0], photos[1], if you used the Array version 
+0

Удивительный !! Большое спасибо @ Paul, так что в основном вы не можете возвращать несколько переменных. Только с объектами или массивами ... Урок хорошо изучен :) –

1

Вы можете объединить 2 результаты в объекте:

return { photo1: showPhoto1, photo2: showPhoto2 }; 
+0

спасибо, что пытаюсь выяснить, почему @Paul использовал «вокруг своих свойств объекта и вашего кода» вы didnt .. Будет ли это работать в обоих случаях ?? –

+0

@RicoPlasakoi Оба действительны. Все кнопки _Object_ _Strings_. Если вы используете метку, она действительна и преобразуется в _String_, но у вас есть ограничения того, что вы можете писать для ярлыков (без пробелов, никаких специальных символов). –

+0

Хорошо, спасибо @ Paul –

0

Нет, вы не можете выполнить несколько return заявления в одной функции. Но вы можете вернуть массив, содержащий результаты. В вашем случае это просто:

return employeePhoto; 
0

Современный ответ на этот вопрос заключается в использовании destructuring, возвращая массив и рассеять массив в переменных на стороне вызывающего абонента:

EmployeeObj.prototype.showEmployee = function (emPhoto0, emPhoto01) { 
    ... 
    return [showPhoto1,showPhoto2] 
} 

// Calling showEmployee 
[showPh1, showPh2] = <Employee>.showEmployee(emPh0, emPh01) 

Поддержка этой модели медленно появляется в браузерах, а node.js должен иметь его очень скоро.

Самый крутой об этом шаблоне является то, что он позволит нам реализовать альтернативный шаблон обработки ошибок, который соответствует Go lang Error handling, возвращая значение и ошибку.

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