原型
- 每一个函数 都有一个属于自己的原型 作用:我们会在原型内部放一些公共的方法,目的不是为了让构造函数去使用,而是为了让实例化对象去使用
- 任何一个数组的构造函数 都是 Array
- 任何一个对象的构造函数 都是 Object
- 任何一个函数的构造函数 都是 Function
万物皆对象
- js 中万物都可以称为对像
对象
- 含义1: 一种数据格式
- 含义2:某一类事物的个体实例(如猫 有白猫 ,黑猫, 花猫, 这些不同的猫都可以说是猫这个类别的具体的一个对象)
原型链
- 原型链:
-
查找对象的某一个属性: -
先在对象内部开始查找, 找到直接使用, 然后停止查找 -
如果没有找到, 会找对象的 obj.__proto__, 如果找到直接使用, 然后停止查找 -
如果这里没找到, 会继续去对象的 __proto__ 查找, 找到直接使用, 然后停止查找 -
如果还是没找到, 会继续向上查找 -
... -
直到找到顶层作用对象 Object.prototype, 找到就是用, 找不到 undefined
问题1: p 的 proto 指向谁?
-
+ p 是 Person 的实例化对象 -
+ __proto__ 指向自身构造函数的原型 -
+ p.__proto === Person.prototype - 问题2: Person 的 proto 指向谁?
-
+ Person 是构造函数, 本质上函数 -
+ 只要是一个函数, 他就是 Function 的实例 -
+ Person.__proto__ 指向了 他的构造函数的原型, 构造函数是 Function, 那 * 么构造函数的 原型 Function.prototype -
+ Person.__proto__ === Function.prototype - 问题3: Person.prototype 的 proto 指向谁?
-
+ Person.prototype 其实就是 构造函数 Person 的原型对象质上就是对象 -
+ 只要是一个 对象, 他就是 Object 的实例 -
+ Person.prototype.__proto__ 指向了 他的构造函数的原型,函数 Object, * 那么构造函数的原型 Object.prototype - 问题4: Function 的 proto 指向谁?
-
+ Function 是构造函数, 本质上就是一个函数 -
+ 只要是一个函数, 他就是 Function 的实例 -
+ Function.__proto__ 指向了 他的构造函数的原型, 构造Function, 那么 构 * 造函数的原型 Function.prototype -
+ Function.__proto__ === Function.prototype - 问题5: Function.prototype 的 proto 指向了谁?
-
+ Function.prototype 其实就是 构造函数 Function 的原型对本质上是对象 -
+ 只要是一个对象, 他就是 Object 的实例 -
+ Function.prototype.__proto__ 指向了 他的构造函数的原型造函数 * * Object, 那么构造函数的原型 Object.prototype -
+ Function.prototype.__proto__ === Object.prototype - 问题6: Object 的 proto 指向了谁?
-
+ Object 是一个构造函数, 本质上还是一个函数 -
+ 只要是一个函数, 那么他的构造函数 就是 Function -
+ Object.__proto__ 指向了他的构造函数的原型, 他的构造函Function, 那* 么 构造函数的原型 Function.prototype -
+ Object.__proto__ === Function.prototype - 问题7: Object.prototype 的 proto 指向了谁?
-
+ Object.prototype 是构造函数 Object 的原型对象, 本质上个对象 -
+ 但是重点: Object.prototype 是 JS 顶层的对象 -
+ Object.prototype.__proto__ === null
- 1 typeof() 可以判断基本数据类型,
- 2 constructor 是原型里的一个属性 , constructor 可以判断当前数据的 构造函数是谁 对于对象中的的属性实际上是可以修改的,其不能够判断 undefined 和 null 两种数据类型
- 3 instanceof instanceof 可以判断 左边的构造函数是否等于右边的构造函数 语法: 检测的数据 空格 instanceof 空格 构造函数 问题: 不能判断 undefined 和 null
- 4 Object.prototype.toString.call(要判断的数据类型) Object 这个构造函数的 原型内部 有一个 toString 的方法 这个方法能够帮我们将数据结构转为字符串的形式 '[object 数据结构]' 我们在使用的时候 如果需要判断其他数据类型, 需要使用 .call这个方法改变内部 this 指向 这个方法任何数据类型都能准确判断(推荐使用)