JavaScript nesnelerini olabildiğince sezgisel olarak yapıp yapılamayacağımı ve mümkün olduğunca doğru olduğundan emin olup olmadığımı görmeye çalışıyorum. Crockford'un JSLint.com'undan bir sürü farklı senaryo çalıştırıyorum ve çok şansım olmadı. Bir hatayı düzeltmek istiyorum, o zaman değişim nedeniyle başka bir şey ortaya çıkıyor. Aşağıda alabildiğim kadar iyi. Bunun üzerinde başka kimse var mı?Bir JavaScript nesnesi oluşturmanın en iyi yolu bu şekilde çalışır ve JSLint'i geçirir?
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
Bu iyi iş gibi görünüyor:
Bu bir nesne yapısı tipik bir yoldur. Bununla birlikte, bunu JSLint aracılığıyla çalıştırdığımda, bana iki özel işlevimin 'Implied Globals' olduğunu belirten bir hata veriyor.
Böyle değişkenlerle üstündeki benim fonksiyonları beyan etmektir ile gelebilir iyi:
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);
}
};
}
Bu, tavsiye olarak çok fazla bir cevap değildir. JsLint hakkında çok fazla endişelenme. Sık sık çok sıkı buluyorum. Bunun yerine programlamaya odaklanın. Bu, başkalarının en iyi uygulamayı tartışmasına izin vereceğim dedi. – TNi
Anlaşmalı. Çok fazla stres atmıyorum. Kodlarımı, burada ve internette öğrendiklerime dayanarak yapılandırabiliyorum. Son birkaç gün içinde JSLint ile uğraşıyorum ve diğer insanların hepsini ele almakla ilgileniyordum. –
sorun, init ve işlevlerin sırasını. Nesneyi döndürmeden önce init hareket ettirir, geçecektir. Ayrıca init işlevine ihtiyacınız olduğunu düşünmüyorum. Belki sadece bir şeyleri ayırmak için kendi kendini yürüten ve anonim olarak. – galambalazs