原型和原型链的讲解

一,原型

①所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象
②搜有函数都有一个prototype(原型)属性,属性值是一个普通的对象
③所有引用类型的__proto__属性指向构造函数的prototype

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

原型的用途:

1.构造函数(Person)通过prototype访问原型对象存放公共方法

2.实例对象p访问原型对象_proto_存放公共对象

3.constructor构造方法(原型对象创建的构造函数)

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>    
</body>
<script>
    //  所有函数都有原型对象
    //  构造函数访问原型对象  prototype  --- 存放公共方法
    //  实例对象访问原型对象  __proto__  --- 存放公共方法
    //  constructor  构造方法(原型对象创建的构造函数)
    
    //  构造函数
    function Person(name,age,sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    //在构造函数的原型上添加公共方法
    Person.prototype.money = function(){
        //  原型对象中的 this 指向 调用他的实例对象
        console.log(this.name+"---这是原型对象上的挣钱方法"+this.age);
    }
    let p = new Person("猿究院",18,"男");  //实例对象
    let p1 = new Person("html",20,"nv");  //实例对象
    console.log(p,p1);
    p.money();
    p1.money();
    Object.prototype.phone = "222222222222";
    Person.prototype.phone = "1111111111";
    p.phone = "333333333";
    console.log(p.phone);
</script>
</html>

二,原型链

每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念

 》》》

①一直往上层查找,直到到null还没有找到,则返回undefined
Object.prototype.__proto__ === null
③所有从原型或更高级原型中的得到、执行的方法,其中的this在执行时,指向当前这个触发事件执行的对象


 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值