# 原型模式

# 多态

多态的思想实际上是把“做什么”和“谁去做”分离开来,要实现这一点,归根结底先要消除类型之间的耦合关系

# new

  1. 创建一个新对象

  2. 将这个对象的__proto__指向正确的原型

  3. 调用这个构造器函数,并将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

对象的__proto__ 属性默认指向它的构造器的原型对象,__proto__就是对象跟“对象构造器的原型”联系起来的纽带。

# Object.create

用来克隆对象,实际上是创建一个新的对象,它的 __proto__ 指向指定的克隆对象。需要通过一个中间函数来实现。

var create = function(obj) {
  var F = function();
  F.prototype = obj;

  return new F();
}
1
2
3
4
5
6

创建一个没有原型的对象:Object.create(null)