原型模式
# 原型模式
# 介绍
原型模式(Prototype Pattern)不是指的 JS 的原型,它是 clone 自己,生成一个新对象的操作。因为 new 一个新对象的时候开销会比较大,或者由于其他原因不合适,所以采用这种方式创建一个一模一样的对象。
Java 默认有 clone 接口,不用自己实现。JS 中有一个比较像的实现就是 Object.create
方法。
# 原型模式的通用实现
// 一个对象(作为原型)
const prototype = {
getName: function() {
return this.first + '' + this.last;
},
say: function() {
console.log('hello world');
}
}
// 基于原型创建 x
let x = Object.create(prototype);
x.first = 'A';
x.last = 'B';
console.log(x.getName());
x.say();
// 基于原型创建 y
let y = Object.create(prototype);
y.first = 'C';
y.last = 'D';
console.log(y.getName());
y.say();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 对比 JS 中的原型(prototype)
- JS 中的 prototype 可以理解为 ES6 class 的一种底层原理
- 上面用到的
Object.create
方法也是基于原型 prototype 的
- 上面用到的
- 而 class 是实现面向对象的基础,并不是服务于某个模式
- 若干年后 ES6 全面普及,大家可能会忽略掉 prototype,但是
Object.create
却会长久存在
(完)