面试题--原型链

166 阅读1分钟

js中是依靠什么实现继承的:原型链
原型链的作用是什么:实现继承
首先靠一张图先理解原型链:

image.png 每一个构造函数的背后都有系统为其分配的一个原型对象,而这个原型对象依然有构造函数和原型对象,最底层的构造函数就是Object,所以就有一句话叫万物皆可对象。

        function Person(name, age) {
            this.name = name
            this.age = age
        }
        Person.prototype.type = '哺乳动物'
        Person.prototype.country = '中国'
        Person.prototype.eat = function () {
            console.log(this.name + '吃东西')
        }
        let p1 = new Person('lisa', 20)
        let p2 = new Person('xiaoxiao', 20)
        console.log(p1)
        console.log(p1.name) //lisa  p1自己有name属性
        console.log(p1.age) //20   p1自己有age
        console.log(p1.type) //哺乳动物  p1自己没有type,但是p1的原型有
        console.log(p1.girlFrined) //undefined  p1自己没有girlFrined, p1的原型也没有girlFrined
        p1.eat() // 吃东西
        p1.learn()//报错  
        p1.toString() //不会报错因为object里面有这个方法
         //查看p1的原型
        console.log(p1.__proto__.constructor) //Person
        console.log(Person.prototype === p1.__proto__) //true
        //查看p1的原型的原型
        console.log(p1.__proto__.__proto__.constructor) //Object
        console.log(Object.prototype === p1.__proto__.__proto__) //true
        //查看p1的原型的原型的原型
        console.log(p1.__proto__.__proto__.__proto__) //null