我刚写了一些 JavaScript 代码,遵循我认为的使用闭包和一些函数创建对象的良好实践:
var myStuff = (function() {
var number = 0;
var fn = {};
fn.increment = function() { number++; };
fn.decrement = function() { number--; };
fn.getNumber = function() { return number; };
return fn;
})();
myStuff.increment();
myStuff.increment();
alert(myStuff.getNumber()); // alerts '2'
我没有问题写出类似于之前片段的代码。 我想编写一些具有类似于 OOP“抽象”类的功能的代码。 这是我的努力结果:
var myStuff = (function () {
var number = 0;
var fn = {};
fn.increment = function () { number++; };
fn.decrement = function () { number--; };
fn.doSomethingCrazy = function () { throw new Error('not implemented'); }; // I want to specify later what this does.
fn.doSomethingCrazyTwice = function () { fn.doSomethingCrazy(); fn.doSomethingCrazy(); };
fn.getNumber = function () { return number; };
return fn;
})();
myStuff.doSomethingCrazy = function () { this.increment(); this.increment(); };
myStuff.doSomethingCrazyTwice();
alert(myStuff.getNumber()); // alerts '4'
上面的代码片段可以工作,但看起来不太优雅。也许我试图强迫 JavaScript(一种函数式语言)去做一些它并没有被设计去做的事情(对象继承)。
有没有一种好的方法在 JavaScript 中定义一个对象,以便稍后可以定义该对象的函数?