Независимые свойства объектов в переменных
Я не знаю как это называется, и название топика такое же.
Видел на одном сайте очень удобную штуку для работы с данными пользователей.
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, время: 01:04. |