Javascript中原型链的相关知识

原型链是JavaScript中对象继承的基础,它描述了通过内部proto属性连接的对象间的层次结构。当查找对象属性时,会从实例对象开始,沿着构造函数的原型链向上搜索,直至找到属性或到达Object.prototype。原型链允许共享属性和方法,实现代码复用,但直接修改原型链上的属性可能导致意外的结果,因为实例可以独立拥有属性。使用构造函数的prototype属性可以为所有实例添加方法,实现继承。
摘要由CSDN通过智能技术生成

1.什么是原型链

原型链就是当我们访问一个对象中的相关属性的时候,首先是在该对象中寻找是否含有该对象,如果找到就直接返回,若没找到则就会寻找该对象的隐示原型上去寻找,即为其构造函数的显示原型对象上寻找,若仍未找到,则就会在其构造函数的隐实原型上去寻找,就样一层一层的往上寻找,就会形成一个链式结构,我们称之为原型链。如果找到顶层的Object.prototype仍未找到该属性,则会返回一个undefined

2.原型链的具体展示

我们可以从下面的相关代码中可以看出

一、我们构建了一个构造函数,并且通过给构造函数的原型对象上添加了一个father属性。

二、然后我们通过new一个构造函数的实例对象,然后访问对象上的相关方法以及属性。

三、大致的寻找流程为,首先在child上寻找是否有father,toString等方法或属性,发现没有则通过child的隐示原型对象即构造函数的显示原型对象上去寻找上述的属性或方法,然后发现有facher的属性,然后在通过显示原型的隐示原型对象即object上去寻找,发现找到了即返回。

        function Person(name){
            this.name = name
        }
        Person.prototype.father = '王五'
        var child = new Person('李四')
        console.log(child);
        console.log(child.father);
        console.log(child.toString);

3.原型链的特点及运用

原型链只是用来查找对象上是否有对应的属性或方法,若没有则通过其隐示原型一层一层的查询,不能修改对应的属性,如下代码

在下面的代码中我们通过Person构造函数构造了两个实例对象,并给其中一个添加了father属性。可能你就会认为,没错,child中没有father属性,然后通过原型链去寻找,找到了然后修改了对应的属性值。所以后面的fahter属性都是李四了,然后却不是这样。通过运行我们发现,虽然child的father是李四但是并不是修改了原型对象上的属性,而是给实例对象上添加了一个father属性,其值对应的是李四罢了。

        function Person(){
       
        }
        Person.prototype.father = '王五'
        var child = new Person()
        child.father = '李四'
        var children = new Person()
        console.log(child);
        console.log(child.father);
        console.log(children);
        console.log(children.father);

那么我们该怎么样进行使用原型链呢?我们可以给构造函数的原型对象上添加修改等方法。然后通过实例对象来进行调用,即实例对象的隐实原型这条道路来进行调用,有点类似于java中的set和getter方法

        function Person(name){
            this.name = name
        }
        Person.prototype.setName = function(name){
            this.name = name
        }
        var child = new Person('李四')
        
        var children = new Person('王五')
        children.setName('赵六')
        console.log(child);
        console.log(child);
        console.log(children);
        console.log(children);

4.原型链的相关总结

原型链是 JavaScript 中一个重要的概念,它描述了对象之间的继承关系。每个 JavaScript 对象都有一个内部链接到另一个对象,这个链接就是原型链。

在 JavaScript 中,每个对象都有一个内部属性 proto,它指向了该对象的原型。原型本身也是一个对象,因此它也有自己的 proto 属性,指向其自己的原型。这样一直向上追溯,就形成了一个链式结构,这个结构就是原型链。

在查找对象的属性时,如果对象本身没有这个属性,JavaScript 引擎就会沿着这个对象的原型链向上查找,直到找到该属性为止。如果一直到最顶层的 Object.prototype 都没有找到这个属性,那么就会返回 undefined。

原型链的特点是:

  1. 每个对象都有一个原型,原型也是一个对象,因此原型也有自己的原型,形成了一个链式结构。

  1. 当查找一个对象的属性时,如果该对象本身没有这个属性,就会沿着它的原型链向上查找,直到找到该属性或者查找到最顶层的 Object.prototype 为止。

  1. 如果最终仍然没有找到这个属性,就会返回 undefined。

原型链在 JavaScript 中是实现继承的重要手段,它可以让我们在不必复制大量代码的情况下,快速创建新的对象,并继承已有对象的属性和方法。同时,原型链还有助于理解 JavaScript 中对象的继承机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值