js的原型及原型链

目录

什么是原型

JS数据类型

构造函数

原型对象

prototype

proto

constructor

 实例与原型

原型的原型

原型链

​编辑

end 


什么是原型

每一个javascript对象(除null外)创建的时候,都会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型中“继承”属性,所有函数都有原型对象。

JS数据类型

基本数据类型(值类型)

string、number、boolearn、null、undefined

复杂数据类型(引用类型) 

Array、Object、Function

构造函数

如下图 p 和 p1 都是 Person(构造函数) 的实例。这两个实例都有一个 constructor (构造函数)属性,该属性指向 Person,即:p.constructor == Person 、p1.constructor == Person。

function Person(uname,age,sex){  //构造函数
        this.uname = uname;
        this.age = age;
        this.sex = sex;
    }

    let p = new Person("竺甜菜",18,"男");  //通过 new 实例化对象
    let p1 = new Person("html",20,"nv ");
    console.log(p,p1);

原型对象

原型对象,就是构造函数的prototype属性,即Person.prototype。

 function Person(uname,age,sex){
        this.uname = uname;
        this.age = age;
        this.sex = sex;
    }

    Person.prototype.fn = function(){
        console.log("这是原型对象上的方法");
    }

prototype

在JavaScript中,所有函数都有一个prototype属性,这个属性指向函数的原型对象。

构造函数访问原型对象: prototype --- 存放公共方法

实例对象访问原型对象: __proto__ --- 存放公共方法

proto

这是每个对象(除null外)都会有的属性,叫做__proto__,这个属性会指向该对象的原型。

prototype 与 proto 具体应用关系如下图 :

 function Person(uname,age,sex){
        this.uname = uname;
        this.age = age;
        this.sex = sex;
        this.fn = function(){
        console.log(this.uname+"今年"+this.age+"岁了------"+this.sex);
         }
    }

    Person.prototype.fn = function(){
        console.log("这是原型对象上的方法");
    }

    console.log("原型对象----  prototype",Person.prototype);

    let p = new Person("竺甜菜",18,"男");  //实例化对象
    let p1 = new Person("html",20,"nv");   //实例化对象
    console.log(p,p1);
   
    // p.fn();
    //  p1.fn();

    //console.log(p.fn === p1.fn);

    // console.log(Person.prototype === p.__proto__ );

    // console.log(p1.fn === p.fn);

    // console.log(Person.prototype.constructor === Person);

constructor

每个原型都有一个constructor属性,指向该关联的构造函数 。

console.log(Person.prototype.constructor == Person);

 实例与原型

我们在读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直到找到最顶层为止。这样就形成了原型链 。

原型的原型

我们说原型是对象创建的时候关联的另一个对象,那么原型也是一个对象,既然是对象那么原型也应该关联一个对象是原型的原型。

let obj = new Object();

原型链

综上所述 ,将原型的实例赋值给另一个对象,另一个对象再赋值给其他的对象,在实际的代码中对对象不同的赋值,就会形成一条原型链。关系图如下:

end 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值