Javascript не поддерживает передачу параметров по ссылке - Не верно
На самом деле это так. Прототипирование позволяет создавать истинные ссылки на все виды объектов JavaScript, включая строки.
Под истинной ссылкой я имею в виду, когда:
- Изменения, внесенные в переменную или объект
передается по ссылке
отражается на фактической переменной
пройдено
- Изменение видят все
ссылки на одну и ту же переменную
- Каждый, кто знает ссылку, может
изменить указанную переменную
Чтобы создать истинную ссылку на переменную:
- Создать функцию конструктора
- Прототип ваших ссылочных переменных на
конструктор
- НЕ объявляйте переменные с
то же имя внутри конструктора
работать!
- Создать функцию change (), которая
изменяет прототипную переменную или делает
так прямо
- Необязательно: Создать ссылку на функцию change ()
внутри вашего конструктора, который установлен
к функции ChangeRef ()
создание
Изменения, сделанные таким образом, будут видны и могут быть изменены всеми другими объектами TestRef ()
function TestRef(s) {
this.string = 'Own test-string: ' + s;
this.change = ChangeRef;
}
function ChangeRef(s) {
TestRef.prototype.refStr = s;
return TestRef.prototype.refStr;
}
r = 'RefStr';
TestRef.prototype.refStr = r; // PROTOTYPE => 'RefStr', copy of r
s = new TestRef('s'); // Obj.string = Own test-string: s, Obj.refStr = RefStr
o = new TestRef('o'); // Obj.string = Own test-string: o, Obj.refStr = RefStr
ChangeRef('ChangedStr'); // Change referenced string!
TestRef.prototype.refStr; // => ChangedStr, referenced string changed
r; // => RefStr, original string intact
x = new TestRef('x'); // Obj.string = Own test-string: x, Obj.refStr = ChangedStr. New sees changed string
s; // => Obj.string = Own test-string: s, Obj.refStr = ChangedStr. Old sees changed string
o; // => Obj.string = Own test-string: o, Obj.refStr = ChangedStr. Old sees changed string
s.change('Changed by local function');
x; // => Obj.string = Own test-string: o, Obj.refStr = Changed by local function