原型链

  • 原型链

    • 函数的原型对象prototype

    函数都有prototype属性指向函数的原型对象【只有函数根除外】

    • 原型对象的构造函数constructor
    • 内部原型(__proto__),原型链就是通过这个来完成的
    1. 所有对象都有__proto__属性(非标准属性,但是所有浏览器都实现了)【null除外】
    2. Object是构造函数,也是对象,Object的prototype是所有对象的根。
    3. Function是函数对象的构造函数。Function的原型对象是所有函数的根,而它的内部原型是Object的原型对象,这是关键
  1. f对象的__proto__内部原型指向了Object的构造函数原型对象,对象实例就可以访问原型对象上的方法

Object === Object.prototype.constructor //==>true

  1. Object的构造函数的prototype属性指向了Object原型对象,反过来Object原型对象也有个属性constructor指向了Object的构造函数,就是一个相互的指向关系


    2018-11-06_134048.png

    2018-11-06_134234.png

    - 先搜索自己有没有这个属性,如果没有就去构造函数原型上找

函数为什么是对象,因为函数的prototype的__proto__指向Object的原型对象

原型链图解
//以下是原型链
m.__proto__ === Dog.prototype
//==> true
Dog.prototype.__proto__ === Object.prototype
//==> true
Object.prototype.__proto__ === null
//==> true
构造函数总结

构造函数的私有属性——指向——Function原型

Object总结

Object私有属性指向——Function原型

私有属性总结

实 例对象的私有属性——指向——构造函数原型
构造函数原型的私有属性——指向——Object原型
Object原型的私有属性——指向——null
Function的私有属性——指向——Function原型
Function原型的私有属性——指向——Object原型

constructor属性总结

原型的constructor属性都指向——该函数
函数的 prototype 属性都指向——该函数对应的原型





//---以下是底层原型---
Dog.__proto__ === Function.prototype
//==> true
Function.prototype === Function.prototype
//==> true
Function.__proto__ === Function.prototype
//==> true
typeof Function.prototype
//==>function
Function.prototype
//==>f(){}
Function.prototype.__proto__ === Object.prototyoe
//==> true
// **所有的函数式Object对象的实例,也就是说函数也是个对象**
Object.__proto__ === Function.prototype
//==> true
  • 闭包
    • 函数的作用域:函数作用域与全局作用域
    • 没有块级作用域
    • 闭包的使用
    • 沙箱模式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容