原型的基本概念
函数访问原型对象
原型是为了解决 构造函数缺点而存在的的,就是构造函数内声明的函数提取到一个公共的地方
JS中,所有的函数都有一个属性 prototype,这个属性指向了一个对象,我们将这个对象
称之为 原型对象 \ 原型 \ 原型空间
每一个原型对象中一定会有一个 属性 constructor, 当前属性的属性值就是说当前原型对象
的那个函数
注意: 通过函数的 prototype 属性获取到的这个函数原型对象,获取到的这原型对象后,可以添加
一些属性
属性的值 没有任何限制,推荐向内部 书写 函数
添加的这个数据不是个构造函数用,而是给当前的实例化对象使用
对象访问自己构造的原型对象
每一个对象 都有一个属性 __proto__
这个属性会指向自己当前构造函数的原型对象
注意: 我们实例化对象可以通过 __proto__ 获取到原型对象的内容,但我们一般不书写 __proto__
ES6 新增 class 类
构造函数的缺点
1、构造函数在调用的时候可以不去书写 new ,只不过效果不对而已
2、构造函数和原型需要分开书写
在ES6 之前,我们在开发的时候,都是书写 构造函数,但是ES6 之后,都改为 class 类
<script>
class Person {
constructor(name,age) {
this.name = name
this.age = age
}
sayHi() {
console.log(123)
}
}
const p1 = new Person('张三',18)
console.log(p1)
p1.sayHi()
</script>

原型链
万物皆对象
对象的一个定义
1.一种数据类型: {key: value, key2: value2 }
2.一类内容中的一个真实个体
在JS 中 只要是 数组 [] 那么 就属于 Array 这一类 内容 中 的 一个真实 个体
在JS 中 只要是 函数 function 那么 就属于 Function 这一类 内容 中 的 一个真实 个体
在JS 中 只要是 对象 {} 那么 就属于 Object 这一类 内容 中 的 一个真实 个体
原型链
是关于对象内部属性的查找规则
当我们在一个对象 内部 查找 一个 属性的时候,会现在当前对象的自身查找
如果找到直接使用并停止查找,如果没有找到,那么会到当前对象的__proto__ 中 继续查找
如果找到直接使用并停止查找,如果没有找到,那么会继续去当前对象的__proto__
中继续查找
......
一直到最顶层的对象 Object.prototype, 还是没有找到,那么就会返回一个 undefined