Próbowałem sprawdzić, czy mogę zbudować moje obiekty JavaScript tak intuicyjnie, jak to możliwe, upewniając się, że jest to "poprawne", jak to możliwe. Prowadziłem kilka różnych scenariuszy na stronie JSLint.com Crockforda i nie miałem szczęścia. Wydaje mi się, że naprawiłem jeden błąd, a następnie pojawia się inny z powodu zmiany. Poniżej jest tak dobrze, jak mogę. Czy ktoś ma inne podejście do tego?Jaki jest najlepszy sposób na zbudowanie obiektu JavaScript, aby działał ORAZ przekazywał JSLint?
Jest to typowy sposób wyglądać struktura obiektu:
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
To wydaje się działać dobrze. Jednakże, kiedy uruchamiam to przez JSLint, daje mi to błąd, że moje dwie prywatne funkcje to "Domniemane globale".
Najlepszym mogę wymyślić jest zadeklarować swoje funkcje na górze ze zmiennych, takich jak ten:
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);
}
};
}
To nie jest tak wiele odpowiedzi jak porady. Nie martw się zbytnio o jsLint. Często uważam to za zbyt ostre. Zamiast tego skoncentruj się na programowaniu. Powiedział, że pozwolę innym omówić najlepszą praktykę. – TNi
Uzgodnione. Nie podkreślam tego zbyt wiele. Po prostu mam sposób konstruowania mojego kodu na podstawie tego, czego nauczyłem się tu i tam w interwebs. W ciągu ostatnich kilku dni bawiłem się z JSLintem i byłem zainteresowany tym, aby inni zrozumieli to wszystko. –
problemem jest init i kolejność twoich funkcji. Przenieś init tuż przed zwróceniem obiektu, który przejdzie. Poza tym nie potrzebuję funkcji init. Może jako samobójczy i anonimowy fn tylko po to, by rozdzielić rzeczy. – galambalazs