JS 关于原型的 一些知识点

79 阅读2分钟

原型的基本概念

    函数访问原型对象
        原型是为了解决 构造函数缺点而存在的的,就是构造函数内声明的函数提取到一个公共的地方
        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>

image.png

原型链

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