原型与原型链

1.原型:

  每当一个构造函数被创建的时候,系统就会自动的分配,一个对象,该对象的作用就是为了实现对象的共享方法。原型其实就是一个对象,存在内存中,原型可以给构造函数实列化(new)对象提供方法。

  访问对象的原型:

    构造函数.prototype(构造函数的原型)

    实例化对象.__proto__(实例化对象访问原型)

 1         function Person(name,age,gender){
 2             this.name=name;
 3             this.age=age;
 4             this.gender=gender;
 5         }
 6 
 7         //构造函数原型中创建一个方法
 8         Person.prototype.sayHi=function(){
 9             console.log('hi~');
10         }
11 
12         var person = new Person('Tony',12,'boy');//实例化函数
13         console.log(person.sayHi);//调用方法
14 
15         var person1=new Person('Anny',12,'girl');
16         console.log(person1.sayHi);
17         //两个实例化后的对象指向同一个方法 
18         console.log(person.sayHi==person1.sayHi);//true
19         //构造函数的原型与实例化后的原型指向相同
20         console.log(Person.prototype===person.__proto__)//true

两个原型对象的关系如图:

 

  

 

2.原型链

    在内存中,存在多个原型对象,都存在着链式关系

        function Person(){}//创建构造函数

        let person=new Person();// 实例化对象

        console.log(Person.prototype==person.__proto__);//true
        console.log(Object.prototype.__proto__);//null
        //原型对象也是另一个构造函数通过new实例化得到的
        console.log(person.__proto__.__proto__);//object
        console.log(person.__proto__.__proto__.__proto__);//null
        var obj=new Object();
        console.log(obj);

该关系如图所示:

 

posted @ 2022-07-08 22:40  hollow~  阅读(65)  评论(0)    收藏  举报