每一个javaScript对象都有一个内部属性[[Prototype]],没法直接操作这个属性,属性对应的值成为这个对象的原型。640.jpg

  • 每个函数有一个prototyope指向原型对象。
  • 原型对象constructor指回构造函数。
  • 每个对象内部属性[[porptotype]]或者proto指向它的原型对象。
  • 用new创建一个对象时会把构造函数的原型对象给到生成对象的[[prototype]]

实现一个new

  1. function objectFactory() {
  2. //创建空对象
  3. var obj = new Object(),
  4. Constructor = [].shift.call(arguments);
  5. //设置对象原型
  6. obj.__proto__ = Constructor.prototype;
  7. //执行函数
  8. var ret = Constructor.apply(obj, arguments);
  9. //判断返回类型并返回
  10. return typeof ret === 'object' ? ret : obj;
  11. };