构造函数 实例 原型对象的关系

new操作符具体做了什么?
1 创建一个空对象 并且将this变量引向该对象 同时继承该对象的原型
2 属性和方法被加入到this引用的对象中
3 新创建的对象由this引用并且最后隐士返回this

构造函数
  普通函数调用this指向window
  构造函数调用(new操作符)
    创建一个实例对象 var obj={}
    让内部this指向obj  
    然后在内部使用this初始化obj实例对象
    最后this返回作为new 操作符构造函数调用的返回值

原型对象
  每一个函数都默认有一个属性:prototype
  prototype是一个普通对象 {}
  也就是说只要声明了一个函数 则自动为函数添加一个 prototype 属性为一个对象
  同时 prototype 对象还具有一个属性:constructor 该属性默认指向构造函数本身
  注意:如果自己重置(rest)构造函数 prototype 会导致默认的 constructor 属性丢失
  所以建议大家在使用Person.prototype={} 写法的时候 最好加上:constructor:Person

实例
  实例是通过new操作符调用函数得到一个全新对象
  实例默认有一个属性:__proto__ 该属性是非标准属性
  __proto__ 默认指向的就是Person 构造函数的 prototype对象
  也就是说 new.Person().__proto__===构造函数.prototype

这样做的目的就是为了让实例对象不通过构造函数就可以直接访问原型对象中的成员
当你通过访问某个属性成员的时候 都会先在自己身上找 如果找到直接返回使用
如果找不到则顺着__proto__找原型对象 如果原型对象中有 则返回 如果没有
则顺着原型对象__proto__继续查找 找到返回 找不到继续向上 直到根部为止
直到Object.prototype.__proto__原点就停止查找 最后找到null 返回undefind
posted @ 2017-07-29 22:25  耳东陈-cw  阅读(147)  评论(0)    收藏  举报