2016-05-27 3 views
1

Я создал сценарий модели в JS, поэтому я могу передать объект и добавить некоторую логику и значения. Я использую get/set для получения значений, однако, когда я запускаю свой код, он выдает максимальный размер стека RangeError: Maximum. Кто-нибудь знает, кто исправить эту ошибку?RangeError: Максимальный размер стека вызовов для Node.js

var model = { 
    get id() { 
     return this.id ; 
    }, 
    set id(id) { 
     this.id = id || ''; 
    }, 
    get filename(){ 
     return this.filename ; 
    }, 
    set filename(name){ 
     this.filename = name || ''; 
    }, 
    get savename(){ 
     return this.savename ; 
    }, 
    set savename(name){ 
     this.savename = name || ''; 
    }, 
    get filetype(){ 
     return this.filetype ; 
    }, 
    set filetype(name){ 
     this.filetype = name || ''; 
    } 
}; 

module.exports = function(parm){ 
    model.id = parm.id ; 
    model.filename = parm.filename ; 
    model.savename = parm.savename ; 
    modle.filetype = parm.filetype; 
    return model ; 
}; 

ответ

1
get id() { 
    return this.id ; 
}, 

Вы определили поглотитель для свойства под названием "идентификатор". Ваша реализация геттера говорит, что он должен вернуть значение свойства «id» из объекта.

Чтобы получить значение свойства «id», система сначала проверяет, есть ли для этого свойства геттер. В этом случае, есть, поэтому геттер называется.

То же самое касается установщика.

Вы должны сохранить фактические значения свойств где-то еще, кроме как значений свойства объекта, иначе вы столкнетесь с той же проблемой, с которой вы столкнулись.

get id() { 
    return this._id; 
}, 
set id(value) { 
    this._id = value || ""; 
}, 

Вам не обязательно делать это именно так; это просто способ, который работает.

+0

С уважением, ошибка была введена в заблуждение. Думаю, потому что у меня есть как get/set, так и _var, это может быть не самый оптимальный способ добиться того, чего я хочу. – John