原型和原型链

50 阅读1分钟

什么是原型

任何对象实例都有一个原型,也叫原型对象,这个原型对象由对象的内置属性_proto_指向它的构造函数的prototype 指向的对象,即任何对象都是由一个构造函数创建的,但是不是每一个对象都有 prototype,只有方法才有 prototype。

image.png

注:object.prototype与obj的指针写反了

什么是原型链

原型链基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。我们知道,每个构造函数都有一个原型对象,每个原型对象都有一个指向构造函数的指针,而实例又包涵一个指向原型对象的内部指针。

方法都一样 例:

 let arr1=function (){
            name:'张珊'
        }
        console.log(arr1.__proto__);//原型
        console.log(arr1.constructor);//构造函数
        console.log(arr1.constructor.prototype);//构造函数访问原型
        console.log(arr1.constructor.prototype.__proto__);//构造函数访问原型的原型
        console.log(arr1.constructor.prototype.__proto__.constructor)//构造函数访问原型的原型的obj
        console.log(arr1.__proto__.__proto__);//原型的原型
        
        let arr = new Array(1,2,3,4,6,5,)
        console.log(arr.__proto__);//原型
        console.log(arr.constructor);//构造函数
        console.log(arr.constructor.prototype);//构造函数访问原型
        console.log(arr.constructor.prototype.__proto__);//构造函数访问原型的原型
        console.log(arr.constructor.prototype.__proto__.constructor)//构造函数访问原型的原型的obj
        console.log(arr.__proto__.__proto__);//原型的原型
        
        let arr2=new String('北京', '上海', '天津')
        console.log(arr2.__proto__);//原型
        console.log(arr2.constructor);//构造函数
        console.log(arr2.constructor.prototype);//构造函数访问原型
        console.log(arr2.constructor.prototype.__proto__);//构造函数访问原型的原型
        console.log(arr2.constructor.prototype.__proto__.constructor)//构造函数访问原型的原型的obj