Независимые свойства объектов в переменных
Я не знаю как это называется, и название топика такое же.
Видел на одном сайте очень удобную штуку для работы с данными пользователей. var vasea = users.findByName('Вася'); var alex = users.findByName('Саша'); alert(vasea.lastname); //Пупкин alert(alex.lastname); //Иванов Как возвращать - я ещё понимаю - просто return {lastname: ...}; Но возможно ли изменять потом их? Посмотрел http://javascript.ru/tutorial/object и стал пробовать: var numbers = { all : ['ноль', 'один', 'два', 'три'], find : function(num) { this.text = this.all[num]; return this; } }; var zero = numbers.find(0); var two = numbers.find(2); alert('0=' + zero.text); //0=два alert('2=' + two.text); //2=два Ну это логично. Мы же меняем одно и то же. Пробовал куда-то впихнуть prototype, хотя я не совсем понял как с ним работать. Точнее не понял как он может мне помочь. Но всё равно у меня получилось 0=2. Тогда у меня другая идея. numbers = {find:function(num){return new numbers_sys(num)}}; numbers_sys будет работать с window.all, которая ['ноль', 'один', 'два', 'три'] Но я чувствую, что оно делается не так. Под "менять" имею в виду numbers.find(2).text; //два numbers.find(2).setText('двойка'); numbers.find(2).text; //двойка Как это делается? Да и возможно ли это вообще... Может надо делать как я думаю - return new ... |
window.all = ['ноль', 'один', 'два', 'три']; var numbers = { find : function(num) { var ret = {}; ret.num = num; ret.text = window.all[num]; ret.setText = function(text) { window.all[this.num] = text; this.text = text; return this; }; return ret; } }; var zero = numbers.find(0); var two = numbers.find(2); console.log('0=' + zero.text); //ноль console.log('2=' + two.text); //два two.setText('двойка'); console.log('2=' + two.text); //двойка console.log(numbers.find(2).text); //двойка Но это ведь бред... Я так думаю... Так надо? Правильно? |
nasqad,
Да нет. Так не получится. var pavel = users.getBy('name', 'pavel'); pavel.setParam('rank', 'tester'); мы так не можем, вы возвращаем return stack.length > 1 ? stack : stack[0]; Тогда я вижу выход - сделать ret и дать ему пачку функций как я сделал в #2 Но в этом и вопрос - так ли это надо делать? |
Сделал вот так
window.all = ['ноль', 'один', 'два', 'три']; var numbers = { find : function(num) { var ret = {}; ret.setText = function(text) { window.all[this.num] = text; this.text = text; return this; }; ret.num = num; ret.text = window.all[num]; return ret; }, findByText : function(text) { var num = 0; window.all.every(function(val, key){ if(val == text) { num = key; return false; } return true; }); return this.find(num); } }; ///////////////////////////////////////////// var zero = numbers.find(0); var two = numbers.find(2); var one = numbers.findByText('один'); console.log('zero.text=' + zero.text); //ноль console.log('two.text=' + two.text); //два two.setText('двойка'); console.log('two.text=' + two.text); //двойка console.log('numbers.find(2).text=' + numbers.find(2).text); //двойка console.log('one.text=' + one.text); //один one.setText('единица'); console.log('one.text=' + one.text); //единица console.log('numbers.findByText(\'единица\').text=' + numbers.findByText('единица').text); //единица Работает идеально, смотрится отлично. Всё правильно сделал? |
window.all - так это же в ишаке зарезервированное свойство.
Да и зачем в гобале хранить эти "цифры"? может в numbers и хранить? |
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 00:51. |