Javascript.RU

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

Ошибка в листинге - привилегированный метод. Джон Рейсиг
Добрый день, JavaScript Developer-ы !

Читаю книгу Д. Рейсига - "JavaScript. Профессиональные приемы программирования" [2008].

Остановился на привилегированных методах, листинг 2.25 ( Пример динамически генерируемых методов при создании нового экземпляра объекта ).

Вот собственно код:
function User(properties) {
        
        for (var i in properties) {
        
            (function(){
            
                this["get" + i] = function() {
                    return properties[i];
                }
                
                this["set" + i] = function(val) {
                    properties[i] = val;
                }
            })();
        }        
    }
    
var user = new User({
    name : "hat_tab",
    age : 100500 
});
    
alert(user.getname());


В результате, у объекта User нет такого метода getname(). Если сделать без "замыкания", то такой метод есть, правда значение его 100500.

Помогите разобраться где ошибка.
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2011, 14:09
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

function User(properties) {
		var that = this;
        for (var i in properties) {
         
            (function(i){
             
                that["get" + i] = function() {
                    return properties[i];
                }
                 
                that["set" + i] = function(val) {
                    properties[i] = val;
                }
            })(i);
        }       
    }
     
var user = new User({
    name : "hat_tab",
    age : 100500
});
     
alert(user.getname());

у внутренней функции свой this.
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2011, 17:43
Новичок на форуме
Отправить личное сообщение для hat_tab Посмотреть профиль Найти все сообщения от hat_tab
 
Регистрация: 23.10.2011
Сообщений: 4

Riim, спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в ИЕ. Объект не поддерживает это свойили метод! goooooch Internet Explorer 3 14.06.2011 16:39
метод call() - ошибка ( mrValter AJAX и COMET 1 31.07.2009 11:09