首页 > 其他分享 >第十九天笔记

第十九天笔记

时间:2023-03-03 20:23:34浏览次数:34  
标签:__ 第十九 笔记 Person 原型 prototype 对应 构造函数

原型和继承

函数的原型(prototype)

概述

prototype 是函数内的一个对象空间,每个函数都有一个,他被称为显式原型

对应的构造函数也属于函数 那么他同样也拥有一个prototype,且对应的prototype只有一个也就是说他会在预编译时候声明一次,也就是prototype是对应的一个构造函数的公共空间,且他只声明一次那么也就是说他就可以解决对应的构造函数的缺陷

function Person(){
this.name='jack'
}
// 构造函数的prototype空间
console.log(Person.prototype)

从上可以知道prototype这个空间是个对象,可以在这个对象中存入对应的函数

function Person(){
this.name='jack'
}
// 构造函数的prototype空间
console.log(Person.prototype)
// 那么我们就可以将对应的函数存入这个对象空间
Person.prottype.sayHello=function(){
   console.log('hello')
}

总结

每个函数内都存在一个prototype的对象空间 构造函数也是函数所以他也存在

prototype这个空间会在预编译的时候进行开辟 (只开辟一次)

利用prototype可以解决构造函数内存储的函数开辟多个内存空间的问题

所以建议将对应的属性存入对应的构造函数 将对应的方法存入prototype

prototyppe里面的方法 可以直接通过对应的对象.方法名来访问

对象的原型(__ proto __)

__ proto __是对象的一个对象空间,他指向对应的构造函数的prototype,他被称为隐式原型

console.log({}.__proto__)
console.log({}.__proto__ == Object.prototype)
console.log(new Object().__proto__ == Object.prototype)

_ proto _ 指向对应的构造函数的prototype 那么也就意味着如果往对象的_ proto _里面添加内容,其实就往造函数的prototype 中添加。

__ proto __是所有对象都拥有的一个对象空间,他指向对应的构造函数的prototype

原型链

概述

在_proto__中寻找属性的过程形成的链子 被称为原型链

原型链查找过程

image-20230303112806786

总结

  • 对应的函数的_proto指向对应的Funtion的构造函数的prototyper

  • 对应的指向关系 先指向自身的构造函数的prototype 再指向对应的父类的构造函数的prototype 再指向上级父类 直到找到 object的构造函数的prototype Object的构造函数的prototype的_proto__指向null (查找属性找到null还没有返回undefined)

  • 对象赋值不遵从原型链(如果存在就修改,没有就添加)

构造函数的继承

原型链继承

将对应的父类构造放入到对应的子类构造的原型上

缺点: 不能进行初始化赋值操作 覆盖子类原型 子类原型方法只能放在原型继承之后

    function Person(name,age){
       this.name=name
       this.age=age
  }
   Person.prototype.sayHello=function(){
       console.log('hello')
  }
   Person.run=function(){
       console.log('running')
  }
   function Student(classNumber){
       this.class=classNumber
  }
   // 原型链继承 默认继承的元素的属性值显示为undefined
   // 不能进行初始化赋值操作
   // 覆盖子类原型 子类原型方法只能放在原型继承之后
   Student.Perototype = new Person()
   // Student.Perototype.play=function(){console.log('玩')}
   var student=new Student('3年2班')
   console.log(student)
   student.sayHello()
   // 构造函数继承无法继承对应的静态方法
   Student.run()

对象冒充继承

将对应的父类构造函数 当作普通函数执行 传入对应的子类构造中的this


function Student(classNumber,name,age){
Person.call(this,name,age)
this.class = className
}

缺点: 获取不了原型上的方法

组合继承

上两种相加

Student.Perototype = new Person()
function Student(classNumber,name,age){
Person.call(this,name,age)
this.class = className
}

缺点: 原型链上有重复的属性

实例继承(pass)

在子类构造中声明父类对象 自动返回对应的父类对象

寄生继承

Student.Perototype = Object.create(Preson.prototype)
function Student(classNumber,name,age){
Person.call(this,name,age)
this.class = className
}
   

标签:__,第十九,笔记,Person,原型,prototype,对应,构造函数
From: https://www.cnblogs.com/balloontrue/p/17176856.html

相关文章

  • 第十八天笔记
    面向对象概述(oop)面向对象是一种思维,将对应的你需要用到的对象进行提取,将对应方法综合到对应的对象中,在需要调用对应的方法的时候去找对应的对象(万物皆对象(任何东西都可抽......
  • 第十七天笔记
    day17运动下运动的要素当前值目标值迭代量运动分类匀速运动(迭代量不变)缓冲运动(迭代量越来越小)链式运动(通过回调函数来执行下一个动画)轮播图......
  • 吴恩达学习笔记5 ()
    2023-03-0315:18:40星期五正规方程(Normalequationwithmultiplevariable)对于某些线性回归问题,可以用更好的方法求得参数\(\theta\)的最优值梯度下降算法......
  • PPT 学习笔记
    PPT使用前期建议更改默认设置1.更改默认保持时间+字体嵌入文件设置文件==》选项==》保存==》 2.常规设置——可更改主题/背景...   3.高级设置——设置默认......
  • 组合数学笔记(二)
    继续十二重计数法:我们考虑把\(n\)个金币分给\(m\)个人,要求满射,方案数为多少。显然金币是没有区别的,人是有区别的,也就是无区别的小球放入有区别的盒子当中,是典型的插板法,......
  • unity学习笔记
    学习过程中的问题平面有碰撞检测但是关了MeshCollider还是有。碰撞检测一直找不到原因是自己不小心将自动巡航组件(NavMeshAgent)。添加到了Plane物体上。使得Pla......
  • 【学习笔记】dsu on tree
    看到了就来学一下。思想借鉴了一类启发式合并的思想?由于树的分叉结构有可以二分的性质,有重儿子的信息是可以直接从子树继承,轻儿子不超过\(log\)层。于是先计算轻儿子,......
  • 哪款笔记软件可以添加视频?
    随着智能手机的发展,现在越来越多的年轻人习惯于使用手机拍摄视频来记录事情,视频已经成为了我们日常生活、工作和学习中不可或缺的一部分。但是视频管理也面临一个共同的问......
  • 《程序员的自我修养》学习笔记——静态链接详解【第三弹】
    静态链接详解现在对ELF可重定位文件的整体轮廓和某些局部细节都有了一定了解。那么对于两个可重定位文件,如何将其链接起来形成可执行文件呢!以如下两个文件为例:/*main.......
  • NestJS学习笔记
    起步要想使用nest需要先安装依赖#全局安装npmi-g@nestjs/cli#局部安装npmi-g@nestjs/cli创建需要使用以下命令(如果使用局部安装,每次使用nest命令都需要......