原型链是什么?

讲原型链就应该先从构造函数说起,构造函数就是一个函数,例如

构造函数

function Person(){}

以上构造了一个名为Person的函数,每个函数都有一个属性prototype 属性指向函数的原型,

原型是一个对象。

原型默认有 constructor 属性,此属性指向函数本身。

Person.prototype.constructor ==Person //true

那原型链是什么呢,在讲原型链之前还有一个实例需要说明。

实例

实例是构造函数构造出来的实例,实例具有一个默认属性 __proto__ 属性指向原型

构造函数有两个特点,

构造:有构造即创建的功能。

函数:是一个函数,具有函数的所有特征。

构造函数的使用:

function CreateObject(name,age,say){
    this.name=name;
    this.age=age;
    this.say=function(){
        console.log(this.name)
    };
}
var o=new CreateObject();

 

使用new操作符创建实例会经历四个步骤:

1,创建一个新对象。

2,将this指向新对象。

3,执行函数内代码。

4,返回对象。

到此,我们可以得到一个构造函数、实例、原型的三角关系图了。

构造函数通过new创建实例对象,

实例通过 __proty__ 属性访问 原型,

原型通过 constructor访问 构造函数,构造函数通过 prototype 访问 原型。

原型链

原型链就是原型的原型 的原型 的原型......

我们知道构造函数和实例都可以访问原型,并且原型的值是可以改变的。

由此,把实例指向的原型值更改为一个其他的构造函数构造的实例,实例默认拥有 __proto__属性,这样原型链就出来了,实例.__proto__.__proto.__proto__,

提示:JS中的所有对象都是继承自Object对象的,所以最后的__proto__会指向 null。

图实:

代码:

function Person(){};
Person.prototype.action="行走";

function Teacher(){};
Teacher.prototype=new Person();

let tA=new Teacher()

浏览器运行结果:

 

参考文章:

1,关于prototype、__proto__与constructor的图解,写的详细易懂,总结的很好。

https://blog.csdn.net/cc18868876837/article/details/81211729

2,《JavaScript高级程序设计》第八章。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值