-
原型链
- 函数的原型对象
prototype
函数都有
prototype
属性指向函数的原型对象【只有函数根除外】- 原型对象的构造函数
constructor
- 内部原型(
__proto__
),原型链就是通过这个来完成的
- 所有对象都有
__proto__
属性(非标准属性,但是所有浏览器都实现了)【null除外】 - Object是构造函数,也是对象,Object的
prototype
是所有对象的根。 - Function是函数对象的构造函数。Function的原型对象是所有函数的根,而它的内部原型是Object的原型对象,这是关键
- 函数的原型对象
原型链图解
- f对象的
__proto__
内部原型指向了Object的构造函数原型对象,对象实例就可以访问原型对象上的方法Object === Object.prototype.constructor //==>true
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
- 闭包
- 函数的作用域:函数作用域与全局作用域
- 没有块级作用域
- 闭包的使用
- 沙箱模式
网友评论