原型和原型链

文章详细介绍了JavaScript中的原型概念,包括原型定义、constructor属性、对象原型以及原型继承。通过示例展示了如何将共用方法定义在原型上,如定义数组的最大值、最小值和求和方法。同时,解释了原型链的工作原理以及instanceof运算符的使用。
摘要由CSDN通过智能技术生成

目录

(一)原型

(1)原型定义

(2)constructor属性

(3)对象原型

(4)原型继承

(二)原型链


(一)原型

(1)原型定义:

   每一个构造函数都有一个prototype属性,指向另一个对象,所以也称为原型对象

(1.1)我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法。

(1.2)构造函数和原型对象中的this都指向实例化的的对象

如何将共用方法定义在原型上

function Star(name,age){

            this.name=name

            this.age=age

            }

        }

        Star.prototype.sing=function(){

            console.log('唱歌')

        }

        //zly和ty就是实例对象,Star为构造函数,构造函数的this指向实例对象

        const  zly=new Star('赵丽颖',18)

        const  ty=new Star('唐嫣',18)

        zly.sing()

        ty.sing()

        console.log(zly.sing===ty.sing)

 定义公共的数组最大值,最小值,求和方法,使其挂载在原型上

  // 用原型写求最大值,最小值和求和的方法,数组有默认的构造方法Array,...this为展开的意思,this指向的是实例对象,在其里面指向的为arr

        const arr=[1,2,3]

        Array.prototype.max=function(){

            return Math.max(...this)

        }

        Array.prototype.min=function(){

            return Math.min(...this)

        }

        Array.prototype.sum=function(){

            return  this.reduce((prev,item)=>prev+item,0)

        }

        console.log(arr.max())

        console.log(arr.min())

        console.log(arr.sum())

 (2)constructor属性

  constructor是原型对象prototype的 一个属性,其指向构造函数

 如果给原型对象重新赋值,需要用constructor重新指回原型对象的构造函数

function Star(){  

        }

        Star.prototype={

            constructor:Star,

            sing:function(){

                console.log('唱歌')

            },

            dance:function(){

                console.log('跳舞')

            }

        }

        console.log(Star.prototype)

 (3)对象原型

实例对象都会有一个属性__proto__指向构造函数的prototype原型对象

(4)原型继承

        解决:不同对象里面包含相同的属性和方法,用构造函数,每次new都会创建一个新的对象

        例如:黑猫白猫都继承了猫的,2只眼睛,四只爪子,但又有自己的特性

  function Cat(){

            this.eyes=2

            this.claw=4

        }

        function BlackCat(){

        }

        // 通过原型继承Cat

        BlackCat.prototype=new Cat()

        BlackCat.prototype.constructor=BlackCat

        // 给黑猫添加一个方法

        BlackCat.prototype.color=function(){

            console.log('黑色的猫')

        }

        const xiaobai=new BlackCat()

        console.log(xiaobai)

        function WhiteCat(){

        }

        WhiteCat.prototype=new Cat()

        WhiteCat.prototype.constructor=WhiteCat

        const xiaohei=new WhiteCat()

        console.log(xiaohei)

 

 黑猫中有color方法,白猫中没有

(二)原型链

原型链是一种查找规则,为对象成员查找属性方法提供了一条路。对象都有__proto__属性,这个属性指向他的原型对象,原型对象也是对象,也有__proto__属性,原型对象指向原型对象的原型对象,一层一层的链式结构就为原型链,最顶层找不到返回为null

(4.1)instanceof 运算符可以判断在哪条原型链上

Array instanceof Object 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值