我一直在尝试查看是否可以尽可能直观地构建我的 JavaScript 对象,同时确保它尽可能“正确”。我一直在通过 Crockford 的 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);
}
};
}