是在某本书上看到的,然后产生了疑惑,代码如下:
ES5的function定义类
// 定义一个栈
function Stack() {
let items = [];
this.push = function push(element) {
items.push(element);
};
this.pop = function pop() {
return items.pop();
};
// 以下为其他栈方法
}
ES6的class定义类
//定义一个栈
class Stack {
constructor() {
this.items = [];
}
push(element) {
this.items.push(element);
}
pop() {
return this.items.pop();
}
// 以下为其他栈方法
}
书上是这么解释的:
ES5
在ES5中我们声明了一个私有的items变量,它只能被Stack函数或类访问。然而,这个方法为每
个类的实例都创建一个items变量的副本。因此,如果要创建多个Stack实例,它就不太适合了。
ES6
变量items却是公共的。ES6的类是基于原型的。虽然基于原型的类比基于函数的类更节省内存,也更适合创建多个实例,却不能够声明私有属性(变量)或方法。
问题
ES5说为每一个实例都创建了一个items变量副本,为何就说不适合创建多个Stack实例?
但ES6用构造函数定义一个items,不也是相当于给每一个实例都创建了一个items变量吗??为何这就适合创建多个实例了?这跟ES5的那个items变量副本的优势在哪呢?
(基于原型的类比基于函数的类更节省内存,也更适合创建多个实例,这句话倒是明白的。)
慕尼黑的夜晚无繁华
ITMISS
繁星淼淼
相关分类