Я пытался понять, смогу ли я создавать свои объекты JavaScript настолько интуитивно, насколько это возможно, при этом убедившись, что это настолько «правильно», насколько это возможно.Я управлял множеством различных сценариев через JSLint.com Крокфорда и мне не повезло.Кажется, я исправляю одну ошибку, затем появляется другая ошибка из-за изменений.Ниже примерно так хорошо, как я могу получить.Кто-нибудь может по-другому взглянуть на это?
Это типичный способ структурирования объекта:
function gizmo(id) {
/* private variables */
var myId = id;
/* private methods */
var init = function () {
if (myId < 1) {
setId(1);
}
};
var setId = function (newId) {
myId = newId;
};
// run 'constructor'
init();
/* public methods */
return {
getId: function () {
return myId;
},
setId: function (newId) {
setId(newId);
},
incrementId: function (inc) {
setId(myId + inc);
}
};
}
// creating an instance of gizmo
var myGizmo = gizmo(-2);
console.log(myGizmo.getId()); // outputs 1
myGizmo.setId(5);
console.log(myGizmo.getId()); // outputs 5
myGizmo.incrementId(2);
console.log(myGizmo.getId()); /// outputs 7
Кажется, это хорошо работает.Тем не менее, когда я запускаю это через JSLint, он выдает ошибку, в которой говорится, что две мои закрытые функции - «Подразумеваемые глобальные переменные».
Лучшее, что я могу придумать, - это объявить свои функции сверху с переменнымикак это:
function gizmo(id) {
/* private variables */
var myId = id,
init,
setId;
/* private methods */
init = function () {
if (myId < 1) {
setId(1);
}
};
setId = function (newId) {
myId = newId;
};
// run 'constructor'
init();
/* public methods */
return {
getId: function () {
return myId;
},
setId: function (newId) {
setId(newId);
},
incrementId: function (inc) {
setId(myId + inc);
}
};
}