Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.03.2013, 20:21
Интересующийся
Отправить личное сообщение для user222 Посмотреть профиль Найти все сообщения от user222
 
Регистрация: 03.03.2013
Сообщений: 15

Независимые свойства объектов в переменных
Я не знаю как это называется, и название топика такое же.
Видел на одном сайте очень удобную штуку для работы с данными пользователей.
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 ...
Ответить с цитированием
  #2 (permalink)  
Старый 03.03.2013, 21:42
Интересующийся
Отправить личное сообщение для user222 Посмотреть профиль Найти все сообщения от user222
 
Регистрация: 03.03.2013
Сообщений: 15

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); //двойка

Но это ведь бред... Я так думаю...
Так надо? Правильно?

Последний раз редактировалось user222, 03.03.2013 в 21:45.
Ответить с цитированием
  #3 (permalink)  
Старый 03.03.2013, 23:42
Интересующийся
Отправить личное сообщение для user222 Посмотреть профиль Найти все сообщения от user222
 
Регистрация: 03.03.2013
Сообщений: 15

nasqad,
Да нет. Так не получится.
var pavel = users.getBy('name', 'pavel');
pavel.setParam('rank', 'tester');

мы так не можем, вы возвращаем return stack.length > 1 ? stack : stack[0];
Тогда я вижу выход - сделать ret и дать ему пачку функций как я сделал в #2
Но в этом и вопрос - так ли это надо делать?
Ответить с цитированием
  #4 (permalink)  
Старый 04.03.2013, 07:03
Интересующийся
Отправить личное сообщение для user222 Посмотреть профиль Найти все сообщения от user222
 
Регистрация: 03.03.2013
Сообщений: 15

Сделал вот так
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); //единица

Работает идеально, смотрится отлично.
Всё правильно сделал?
Ответить с цитированием
  #5 (permalink)  
Старый 04.03.2013, 07:29
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

window.all - так это же в ишаке зарезервированное свойство.
Да и зачем в гобале хранить эти "цифры"? может в numbers и хранить?
Ответить с цитированием
  #6 (permalink)  
Старый 04.03.2013, 16:43
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от user222
Сделал вот так
window.all = ['ноль', 'один', 'два', 'три'];
Сообщение от danik.js
window.all - так это же в ишаке зарезервированное свойство.
Да и зачем в гобале хранить эти "цифры"? может в numbers и хранить?
мало ли кому еще пригодится

Сообщение от nasqad
я вам жекверю сделал, а вы
не все способны оценить
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти точки соприкосновения двух объектов в RaphaelJS Fatalityap Библиотеки/Тулкиты/Фреймворки 3 03.08.2012 16:33
как создавать динамически свойства объектов kichSman Общие вопросы Javascript 0 11.04.2012 21:52
Массив объектов или объект объектов vladlen Общие вопросы Javascript 19 30.10.2010 03:10
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28