原型和原型链总结

  1. 凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。
  2. 实例的构造函数属性(constructor)指向构造函数。(实例没有的属性,js会尝试往原型对象上找,原型对象上没有,再往原型对象的-proto-(Object.prototype)上找,最终会找到Object.prototype._proto_(他就是原型链的终点null),找到就返回对应的值,没找到就返回undefined)
  3. 每个对象都有 __proto__ 属性,但只有函数对象才有 prototype 属性。
  4. 原型对象(Person.prototype)是 构造函数(Person)的一个实例。(Person.prototype instanceof Person 为 false)
  5. 原型对象其实就是普通对象(但 Function.prototype 除外,它是函数对象,但它很特殊,他没有prototype属性(前面说道函数对象都有prototype属性))
  6. 原型对象是用来做什么?主要作用是用于继承。
  7. this 在函数执行时指向实例。
  8. null作为一个基本数据类型为什么会被typeof运算符识别为object类型呢? 这是因为javascript中不同对象在底层都表示为二进制,而javascript 中会把二进制前三位都为0的判断为object类型,而null的二进制表示全都是0,自然前三位也是0,所以执行typeof时会返回'object。这是个历史遗留feature(or bug)。
  9. Object.create()这个方法本来就是用来创建无原型对象的 顾名思义 其实也就是没有__proto__
  10. Object.prototype.__proto__ === null
  11. 所有函数对象的_proto_都指向Function.prototype,它是一个空函数(Empty function)

  12. Math,JSON是以对象形式存在的,无需new。它们的_proto_是Object.prototype

  13. 所有对象的 __proto__ 都指向其构造器的 prototype

  14. Object.__proto__ === Function.prototype // true

  15. Function.__proto__ === Function.prototype // true

  16. Function.prototype.__proto__ === Object.prototype

  17. 原型和原型链是JS实现继承的一种模型。
  18. 原型链的形成是真正是靠__proto__ 而非prototype

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章