Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   Ошибка в листинге - привилегированный метод. Джон Рейсиг (https://javascript.ru/forum/study/22510-oshibka-v-listinge-privilegirovannyjj-metod-dzhon-rejjsig.html)

hat_tab 23.10.2011 13:52

Ошибка в листинге - привилегированный метод. Джон Рейсиг
 
Добрый день, 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.

Помогите разобраться где ошибка.

Riim 23.10.2011 14:09

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.

hat_tab 23.10.2011 17:43

Riim, спасибо!


Часовой пояс GMT +3, время: 03:58.