web前端练习22----js中的原型对象prototype,原型链(重要)

本文深入探讨JavaScript中的原型对象和原型链。通过原型对象,我们可以为构造函数的实例共享属性和方法,减少内存消耗。当我们访问对象的属性或方法时,会沿着原型链向上查找,直至找到Object的原型对象。文中还通过代码示例和图解阐述了构造函数与原型对象的关系,以及`instanceof`操作符的工作原理。
摘要由CSDN通过智能技术生成

原型对象 原理解析:

我们创建的每一个函数,解析器都会向函数中添加一个属性 prototype
这个属性对应着一个对象,就是原型对象。

如果函数作为普通函数,调用 prototype 没有任何作用

当函数以构造函数的形式调用时,它所创建的对象都会有一个隐含的属性 __proto__,
我们可以通过 __proto__ 来访问原型对象

原型对象就相当于一个公共区域,同一个构造函数的实例都能访问到这个原型对象
我们可以将对象共有的内容,统一设置到原型对象中

创建构造函数时,可以将对象共有的属性和方法,统一添加到构造函数的原型对象中,
这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了

当我们访问对象的一个属性或者方法时,他会先在对象自身中寻找,如果有则直接使用,
如果没有则会去原型对象中寻找,如果有则直接使用。
如果原型对象中也没有,则会在原型对象的原型对象中寻找,一层一层往上找,直到找到Object的原型对象,
如果没有,就没有这个属性或方法

图解:

 

下面写一些具体例子:

拿到原型对象:

        // 拿到原型对象:
        function method1() {
            // 构造函数
            function Person() {

            }
            // 原型对象
            let yuanxing = Person.prototype;

            // 实例化对象
            let person1 = new Person();
            // 通过对象找到原型对象 person1.__proto__
            console.log(yuanxing == person1.__proto__);

            // 任何对象都可以找到原型对象 person2.__proto__
            let person2 = new Person();
            console.log(yuanxing == person2.__proto__);

        }

调用对象属性和方法,先在自身找,自身没有在原型对象中找

        //调用对象属性和方法,先在自身找,自身没有在原型对象中找
        function method2() {
            // 构造函数
            function Person() {

            }

            // 向原型对象中添加属性和方法
            Person.prototype.name = 'zhh';
            Person.prototype.method = function (args) {
                console.log('原型对象的方法>>>' + args);
            }

            // 调用对象属性和方法,先在自身找,自身没有在原型对象中找
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值