过程与数据的结合是形容面向对象中的“对象”是经常使用的表达。对象以方法的形式包含了过程,而闭包则是在过程中以环境的形式包含了数据。通常用面向对象思想能实现的功能,用闭包也能实现。 反之亦然。 在JavaScript 语言的祖先 Scheme语言中,甚至都没有提供面向对象的原生设计,但可以使用闭包来实现一个完整的面向对象系统。(建议慢慢的,多读几遍)
下面来看看这段跟闭包相关的代码:
var extent = function() {
var value = 0;
return {
call: function() {
value++;
console.log(value);
}
}
};
var extent = extent();
extent.call(); //输出 1
extent.call(); //输出 2
extent.call(); //输出 3
如果换成面向对象的写法:
var extent = {
value : 0,
call: function() {
this.value++;
console.log(value);
}
};
extent.call() //输出1
extent.call() //输出2
extent.call() //输出3
或者
var Extent = function() {
this.value = 0;
};
Extent.prototype.call = function() {
this.value++;
console.log(value);
};
var extent = new Extent();
extent.call() //输出1
extent.call() //输出2
extent.call() //输出3