面向对象原型实操详解

73 阅读1分钟

原型练习题

        // const fn = new Function('console.log(123)')
        // fn()

        function Person(name, age) {
            this.name = name
            this.age = age
        }
        Person.prototype.sayHi = function () {
            console.log('你好~~~')
        }
        const p1 = new Person('QF001', 18)

        /**
         *  1. p1 的 __proto__ 指向谁
         *      __proto__ 指向自己构造函数的原型
         *      所以 相当于 指向了 Person.prototype
         * 
         *      p1.__proto__ === Person.prototype
         * 
         *  2. Person 的 __proto__ 指向谁
         *      Person 是一个构造函数, 构造函数本质上就是一个函数而已
         *      在 JS 中, 只要是一个函数, 那么就属于构造函数 Function 的实例化对象
         *      __proto__ 指向自己构造函数的原型
         *      所以相当于 指向了 Function.prototype
         * 
         *      Person.__proto__ === Function.prototype
         * 
         *  3. Person.prototype 的 __proto__ 指向谁
         *      Person.prototype 是 Person 构造函数的原型, 本质上就是一个对象而已
         *      在 JS 中, 只要是一个对象, 那么就属于构造函数 Object 的实例化对象
         *      __proto__ 指向自己构造函数的原型
         *      所以相当于指向了 Object.prototype
         * 
         *      Person.prototype.__proto__ === Object.prototype
         * 
         *  4. Function 的 __proto__ 指向谁
         *      Function 是一个构造函数, 构造函数本质上就是一个函数而已
         *      在 JS 中, 只要是一个函数, 那么就属于构造函数 Function 的实例化对象
         *      __proto__ 指向自己构造函数的原型
         *      所以相当于 指向了 Function.prototype
         * 
         *      Function.__proto__ === Function.prototype
         * 
         *  5. Function.prototype 的 __proto__ 指向谁
         *      Function.prototype 是 Function 构造函数的原型, 本质上就是一个对象而已
         *      在 JS 中, 只要是一个对象, 那么就属于构造函数 Object 的实例化对象
         *      __proto__ 指向自己构造函数的原型
         *      所以相当于指向了 Object.prototype
         * 
         *      Function.prototype.__proto__ === Object.prototype
         * 
         *  6. Object 的 __proto__ 指向谁
         *      Object 是一个构造函数, 构造函数本质上就是一个函数而已
         *      在 JS 中, 只要是一个函数, 那么就属于构造函数 Function 的实例化对象
         *      __proto__ 指向自己构造函数的原型
         *      所以相当于 指向了 Function.prototype
         * 
         *      Object.__proto__ === Function.prototype
         * 
         *  7. Object.prototype 的 __proto__ 指向谁
         *      因为 Object.prototype 是 JS 的顶层对象, 在往上就没有了, 所以这个值为 null
         *      console.log(Object.prototype.__proto__)     null
        */

        console.log(p1.__proto__ === Person.prototype)
        console.log(Person.__proto__ === Function.prototype)
        console.log(Person.prototype.__proto__ === Object.prototype)
        console.log(Function.__proto__ === Function.prototype)
        console.log(Function.prototype.__proto__ === Object.prototype)
        console.log(Object.__proto__ === Function.prototype)
        console.log(Object.prototype.__proto__)