# 原型模式
# 多态
多态的思想实际上是把“做什么”和“谁去做”分离开来,要实现这一点,归根结底先要消除类型之间的耦合关系
# new
- 创建一个新对象 
- 将这个对象的 - __proto__指向正确的原型
- 调用这个构造器函数,并将 - this指向新对象
var objectFactory = function() {
  var obj = new Object();
  var Constructor = [].shift.call(arguments);
  obj.__proto__ = Constructor.prototype;
  var ret = Constructor.apply(obj, arguments);
  return typeof ret === 'object' ? ret : obj;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
对象的__proto__ 属性默认指向它的构造器的原型对象,__proto__就是对象跟“对象构造器的原型”联系起来的纽带。
# Object.create
用来克隆对象,实际上是创建一个新的对象,它的 __proto__ 指向指定的克隆对象。需要通过一个中间函数来实现。
var create = function(obj) {
  var F = function();
  F.prototype = obj;
  return new F();
}
1
2
3
4
5
6
2
3
4
5
6
创建一个没有原型的对象:Object.create(null)