【JavaScript高级进阶】构造函数和原型,学会prototype
目录
前言
1.构造函数和原型
1.1使用prototype解决内存浪费的问题
1.2constructor构造函数构造器构造函数
2.原型链
2.1js中成员查找规则
2.2原型对象this指向
2.3扩展内置对象
3.call作用
4.继承
4.1利用原型对象继承
写在最后
前言
哈喽哈喽大家好,因为最近的事情多一点,所以停更了几天,时隔半个月,我山鱼又回来了,以后会持续更新的烟花🎉🎉🎉【本篇主要更新了es5的对象原型prototype和call的使用,以及原型对象内部的方法继承和指向回】
1.构造函数和原型
1.1使用prototype解决内存浪费的问题
缺点:存在内存浪费的问题,
如果有俩对象或者更多就会对一个复杂数据类型进行空间的多次开辟
构造函数原型prototype原型对象主要解决了内存浪费的问题构造函数通过原型分配的函数是所有对象所共享的。在JavaScript里每一个构造函数都有一个 prototype属性,指向另一个对象。这个prototype就是一个对象,prototype这个对象的所有属性和方法,都会被构造函数所拥有。这时候就可以使用prototype把方法放到里面供该对象所有的实例对象使用。
对象原型_ proto_ 对象
对象都会有一个属性_ proto_ 指向构造函数的 prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有_ proto_ 原型的存在。
sy的 _ proto_ 和sym的 _ proto_ 是一样的方法的查找规则:首先先看sy,sym对象身上是否有sing 方法,如果有就执行这个对象上的sing ,因为存在_ _ proto _ _,就去构造函数原型对象Prototype的存在,就去构造函数原型对象Prototype身上去查找sing这个方法(简单来说就是,我自己有就使用,没有就去原型对象里找)函数 和 对象创建时 会自动创建一个属性 他两指向同一个空对象
1.2constructor构造函数构造器构造函数
对象原型(_ proto _) 和构造函数( prototype )原型对象里面都有一个属性constructor属性, constructor我们称为构造函数,因为它指回构造函数本身。
他们俩里面都有constructor如果prototype里面以对象的形式添加,那么就是prototype指向变了,指向了一个新的原型对象,这个新对象里没有指向construor,需要自己手动指向一下
2.原型链
2.1js中成员查找规则
当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。 如果没有就查找它的原型(也就是._ proto _指向的prototype原型对象)。 如果还没有就查找原型对象的原型( Object的原型对象)。 依此类推一直找到Object为止( null )。
2.2原型对象this指向
1.在构造函数中,里面this指向的是对象实例shanyu
<script>
function Person(uname, uage) {
this.uname = uname;
this.uage = uage;
}
// 声明一个变量然后验证this指向是不是和实例化对象相同
var that;
Person.prototype.skill = function () {
console.log('我会吃饭');
that = this;
}
var shanyu = new Person('山鱼', 30);
shanyu.skill();
console.log(that === shanyu);
</script>
2.3扩展内置对象
可以通过原型对象,对原来的内置对象进行扩展自定义的方法.
<script>
// 自定义对象应用,给Array添加一个自定义方法
Array.prototype.sum = function () {
var sum = 0;
for (var i = 0; i < this.length; i++) {
sum += this[i];
}
return sum;
}
var arr = [1, 2, 3, 4];
console.log(arr.sum());
</script>
数组和字符串内置对象不能给原型对象覆盖操作Array.prototype = {} 如果进行该操作就会使本来有的方法被覆盖掉,只能是Array.prototype.方法名= function(){} 的方式。
3.call作用
调用这个函数,并且修改函数运行时的this指向,有三个参数分别是thisArg 当前调用函数this的指向对象arg1 , arg2 传递的其他参数
<script>
function sing(x,y) {
console.log("a~a~给我已被忘情水");
console.log(this);
console.log(x+y);
}
var fn = {
name: '山鱼'
}
// call()可以改变这个函数的this指向此时这个函数的this就指向了o这个对象
sing.call(fn,1,2)
</script>
4.继承
通过我们打的可以看到this的指向为Son,也就是Son使用了父构造函数里面的,uname,uage
4.1利用原型对象继承
es6之前并没有extends所以可以使用构造函数和模型对象结合的方式来进行继承操作
<script>
function Father(uname, uage) {
this.uname = uname;
this.uage = uage;
}
Father.prototype.eat = function () {
console.log("我爱吃鸡腿");
}
// 子构造函数
Son.prototype = new Father();
Son.prototype.constructor = Son;
function Son(uname, uage, swing) {
Father.call(this, uname, uage);
this.swing = swing;
}
Son.prototype.student = function () {
console.log('我爱学习!!');
}
// 要向使用父亲原型对象里面的方法,可以实例化一下Father,然后
// 这时候Son的this指向到了Father,所以我们要用constructor将this指回到Son
var son = new Son('山鱼妹', 18, "游泳冠军!!!");
// console.log(son.eat());
console.log(son);
console.log(Father.prototype);
</script>
写在最后
yimg一只蛋,如果从外面被敲开,注定只能被吃掉。如果从里面啄开,说不定是只鹰!🦅yimg一只蛋,如果从外面被敲开,注定只能被吃掉。如果从里面啄开,说不定是只鹰!🦅
点赞👍:您的赞赏是我前进的动力!
收藏⭐:您的支持我是创作的源泉!
评论✍:您的建议是我改进的良药!
山鱼🦈的个人社区:欢迎大家加—— 山鱼社区
相关文章:

CodeForces - 545D Queue 贪心 排序
题目链接:点击查看 Little girl Susie went shopping with her mom and she wondered how to improve service quality. There are n people in the queue. For each person we know time ti needed to serve him. A person will be disappointed if the time he …...

牛客网 Applese 走方格
题目链接:点击查看 题解:我们容易发现到当n,m都为奇数时,是回不到原点的,因为你无论哪个方向走一去一回就是两步,所以n和m必然有一个偶数,那至于我们怎么走呢,看下图,注意的是n1,m2…...

括号有效配对题型问题解法
目录 问题描述: 问题一:怎么判断一个括号字符串有效? 问题二:如果一个括号字符串无效,返回至少填几个字符能让其整体有效。 问题三:返回一个括号字符串中,最长的括号有效子串的长度。 问题四…...

python导入安装包
主要分两种方式:在线安装和离线安装 在线安装 因为我公司开发是在云桌面,里面是没有外网的。之前是只能离线安装,后面搭了一个内部镜像环境。 1.添加配置文件进行换源 2.检查requirements.txt配置 3.直接使用pycahrm工具install 换源 …...

POJ - 2406 Power Strings next数组应用循环节
题目链接:点击查看 Language:Default Power Strings Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 61784 Accepted: 25534Description Given two strings a and b we define a*b to be their concatenation. For example, if a "abc" and…...

JS中 [] == ![]结果为true,而 {} == !{}却为false, 追根刨底
转载自 JS中 [] ![]结果为true,而 {} !{}却为false, 追根刨底 console.log( [] ![] ) // true console.log( {} !{} ) // false 在比较字符串、数值和布尔值的相等性时,问题还比较简单。但在涉及到对象的比较时,问题就变…...

Spring Boot 自动配置的 “魔法” 是如何实现的?
转载自 Spring Boot 自动配置的 “魔法” 是如何实现的? Spring Boot是Spring旗下众多的子项目之一,其理念是约定优于配置,它通过实现了自动配置(大多数用户平时习惯设置的配置作为默认配置)的功能来为用户快速构建出…...

每天五分钟机器学习:超平面分离定理和凸优化
凸集和凸函数 在点集拓扑学与欧几里得空间中,凸集是一个点集,其中每两点之间的直线上的点都落在该点集中。如下所示: 函数任意两点(x,f(x))和(y,f(y))连线上的值大于(x,y)区间内任意一点m的值f(m),那么这个函数就是一个凸函数: 超平面分离定理 空间中存在两类样本,…...

AcWing 848. 有向图的拓扑序列
原题链接:AcWing 848. 有向图的拓扑序列 给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在 重边 和 自环 。 请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。 若一个由图中所有点…...

数论一些小总结
1.对于任意一个素数p, n!中含有p的个数为 (n/p n/p^2 n/p^3 ......). 2.c(n,k) n! / ( k! * (n-k)! ). 3.c(n,k)(n-k1)/k*c(n,k-1). 4.任意一个数n可以写成若干个素数的乘积,即 p1^a1 * p2^a2*......*pn^an, 它的的约数的个数为 (a11)*(a21)*..…...

Spring MVC竟然有5种参数绑定的方式?你知道几种?
转载自 Spring MVC竟然有5种参数绑定的方式?你知道几种? SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了下面通过5个常用的注解演示下如何进行参…...

接口测试那些事儿
什么是接口? 首先,在讲接口测试之前,我们先要搞清楚接口类型的概念。 接口:可能是系统与系统(包括服务与服务)之间的调用,像A系统(服务)给B系统(服务&#x…...

mysql重置Root密码
方法一: 在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysql mysql>use mysql; mysql>更新 user set passwordpassword(新密码) WHERE Userroot; mysql>flush privileges; 运…...

Google Swift 与 DC 传输
网络拥塞,默认指转发节点出现了严重的排队现象,甚至队列溢出而丢包。、 但接收端也是一个统计复用系统(通用 OS 均为统计复用系统,比如 Linux),但凡统计复用系统就是潜在拥塞点,即可套用排队论模型。 人们很少将最后…...

每天一个adb命令:wm命令详解
wm命令可以用于获取屏幕分辨率、像素密度等。 前提:Android4.3及以上 usage: wm [subcommand] [options]wm size [reset|WxH]wm density [reset|DENSITY]wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]wm size: return or override display size.wm density: overrid…...

idea插件开发入门
前言:最近想研究一款自动在idea中定位缺陷及发送JIRA的快捷工具,方便提升报自动化脚本的bug的效率。因为idea插件学习是必不可少了,沉淀小结如下。 idea插件开发入门插件用途工程创建配置文件Action实现开发语法常用对象常用方法运行效果打包…...

读王安石变法
今天早上读到王安石变法,王安的变法确实充满理想化。以现代金融的办法进行国家的经济改革。但最终却并未走向成功,其中值得我们反思。思想太过超前,在没有实际土壤的环境下,再好的策略都难免不可能实现,这让我想起来摩…...

2017 ICPC Asia Urumqi I. A Possible Tree 带权并查集
题目链接:https://nanti.jisuanke.com/t/40520 题解:因为他们都是联通的且只有唯一路径,所以不用管之前怎么连的,直接按照他给的查询,带权并查集判断即可 #include <bits/stdc.h> using namespace std; const …...
基于数据驱动的接口自动化测试解决方案
总结一下我么项目中使用的基于数据驱动的接口自动化测试解决方案,仅供大家参考。1.接口框架设计结构 2.接口测试脚本设计原则 3.持续集成 这块用jenkins就可以了,就不介绍了,目前我们项目的集成规则介绍一下: 1.脚本job与应用对…...

JavaFX其他事件
一、其他事件 InputMethodEvent.InputMethodTextChanged 文本输入改变 ContextMenuEvent.CONTEXT_MENU_REQUESTED 上下文菜单请求 二、用法 node.setOnXX(event->{//do something });node.addEventFilter(XXEvent.XX, event -> {//do something});...

SpringBoot开启事务
Transactional 直接在想要启动事务的方法或者类上添加Transactional注解即可,在类上添加注解,默认类下的所有方法都会使用事务。 在类上添加注解 Transactional Service public class UserServiceImpl implements UserService { } 在方法上添加注解 …...

深入探索 Java 热部署
转载自 深入探索 Java 热部署 简介 在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。对…...

C++设计模式
管理变化, 提高复用 两种手段:分解 抽象 八大原则:https://blog.csdn.net/mmk27_word/article/details/108521903 重构技法: 静态 -> 动态 早绑定 -> 晚绑定 继承 -> 组合 编译时依赖 -> 运行时依赖 紧耦合 ->…...

spring boot深入及启动原理探究
围绕spring boot 的优点,本文我们来探究一下spring boot具体是如何实现这些特性的。 自动配置:针对很多Spring应用程序和常见的应用功能,Spring boot能自动提供相关配置;起步依赖:告诉Spring boot需要什么功能,它就能引…...
为什么大公司一定要使用DevOps
转载自 为什么大公司一定要使用DevOps 0 DevOps的意图 究竟什么是DevOps? 要想回答这个问题,首先要明确DevOps这个过程参与的人员是谁?即开发团队和IT运维团队!那么,DevOps的意图是什么呢?即在两个团队之间&#…...

JfreeChart柱状图饼图
JfreeChart画出柱状图饼图的代码片段及详细的注释,附件为JfreeChart中文API一览表,和生成的柱状图,饼图图片 import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.C…...

自动装配的底层实现
public void autowire(Object o, Map<String, String> map) throws Exception { // 获得map 所有key Set<String> keys map.keySet(); // 获得Object中所有属性 // 获得Class对象 Class c o.getClass(); // 获得…...

C/C++ 时间知识总结
文章目录C/C 中时间的概念常用的时间库函数time()asctime()gmtime()ctime()localtime()mktime()strftime()difftime()C/C 获取当前(本地)时间的方法方法一方法二方法三方法四方法五C/C 中时间的概念 Unix 时间戳(Unix timestamp)…...

文件上传,你还存储在应用服务器?
文章目录前言一、准备工作1. 开通腾讯云对象存储服务2. 创建存储桶3. 密钥管理,创建密钥三、整合步骤1. 添加maven依赖2. yml文件增加配置3. 新建 COS 配置类4. 新建 COS 上传工具类5. 新建 Controller 上传接口6. 测试总结前言 嗨,大家好,我…...

Java异常打印输出中常见方法的分析
Java异常是在Java应用中的警报器,在出现异常的情况下,可以帮助我们程序猿们快速定位问题的类型以及位置。但是一般在我们的项目中,由于经验阅历等多方面的原因,依然有若干的童鞋在代码中没有正确的使用异常打印方法,导…...

Web渗透测试攻防之浅述信息收集
前言 众所周知渗透测试的本质是信息收集,在渗透测试中信息收集的质量直接关系到渗透测试成果的与否。在对系统进行渗透测试前的信息收集是通过各种方式获取所需要的信息,收集的信息越多对目标进行渗透的优势越有利。通过利用获取到的信息对系统进行渗透…...
Mysql调优你不知道这几点,就太可惜了
转载自 Mysql调优你不知道这几点,就太可惜了 一、Mysql的逻辑分层 Mysql分为:连接层、服务层、引擎层、存储层。 当客户端向服务端发起操作请求的时候,执行过程是这样的: 1、客户端端与Mysql服务端的连接层建立连接ÿ…...

数据可视化之汽车销量,截止到2022年目前中国汽车保有量是3.02亿辆
汽车在我们日常生活中是必不可少的代步工具,随着中国的经济发展,截止到2022年目前中国汽车保有量是3.02亿辆,2021年全国新注册登记机动车就已达3674万辆。现在居民的生活越来越好,小编通过数据可视化分析整理了一些工业汽车的产销…...

【C++修炼之路】8. string类详解
每一个不曾起舞的日子都是对生命的辜负 C之string类本节目标1. string类概览1.1 string的由来1.2 string函数列表2.string常用接口1. 初始化2. string::npos3. c_str()4. 获取长度(length、size)5. 容量(size、capacity)6. 插入(insert)7. 替…...

Monaco Editor教程(十二):使用Marker来增加分词注释,标记,优化编辑器交互体验
前言 在编辑器中有很多交互,其中一种交互就是当鼠标放到一个class上,显示该类的定义,该类的行数,注释,这在monaco中很常见,有时这个class并不是在当前文件定义的,而是在其他未打开的文件中定义…...

八大设计模式原则
1.依赖倒置原则 高层模块不依赖底层模块,二者都应该依赖抽象 抽象不依赖实现细节,实现细节应该依赖于抽象 这一原则与下面的针对接口编程而不是针对实现编程是一个道理,我们设计一个程序,我们应该先想好我们想要抽象什么&#x…...
每天一个adb命令:input 命令详解
input命令可以用于向键盘发送一些指令,先看看input的官方说明: Usage: input [<source>] <command> [<arg>...]The sources are:mousekeyboardjoysticktouchnavigationtouchpadtrackballstylusdpadtouchscreengamepadThe commands an…...

CSDN 编程竞赛·第八期总结
CSDN 编程竞赛第八期总结1.代写匿名信2.小艺改编字符串3.开学趣闻之美食诱惑4.争抢糖豆CSDN 编程竞赛第八期为笔者参加的第三次 CSDN 编程竞赛,本来报名了第七期的,因为时间和二十大撞了,就错过了,第八期成绩似乎不错,…...
写给工程师的10条精进原则
转载自 写给工程师的10条精进原则 引言 时间回到8年前,我人生中的第一份实习工作,是在某互联网公司的无线搜索部做一个C工程师。当时的我可谓意气风发,想要大干一场,结果第一次上线就写了人生中第一个CaseStudy。由于对部署环境…...

基于java的开源车牌识别源码
真正的大师,永远都怀着一颗学徒的心! 有没有发现昨天断更了一天 年底各种写文档 准备项目验收 刚好也快放假啦 忙完这几天 要回老家过年了 可能要断更一段时间啦 年后会继续的 今天给大家推荐一个开源的车牌识别的demo源码 技术选型 软件架构 B/S 架构&…...

matlab图形功能
//...

程序员着装的改变
是什么力量,让任何地方的程序员都享有「免于体面的自由」? 在今天的社会里,工程师往往代表着知识水平和社会地位。每当普通人听到这个头衔,总会报之以敬仰的目光: 但有一种工程师,虽然也是如假包换的高级技…...

自动化早已不是那个自动化了,谈一谈自动化测试现状和自我感受……
前言 从2017年6月开始接触自动化至今,已经有好几年了,从17年接触UI自动化(unittestselenium)到18年接触接口自动化(unittestrequests)再到18年自己编写自动化平台(后台使用python的flask&#…...

你真的很熟分布式和事务吗?
转载自 你真的很熟分布式和事务吗? 微吐槽 hello,world. 不想了,我等码农,还是看看怎么来处理分布式系统中的事务这个老大难吧! 本文略长,读者需要有一定耐心,如果你是高级码农或者架构师级别…...

组合数总结
转自:国特震哥 点击查看链接 对于求C(n,m) 1.如果是对于小范围内的n和m(不是很难)就不说了 差不多用java的大数就可以了 2.当n在1e10^5范围左右,往往是会有取模,设这个数为mod(往往mod为质数࿰…...

HDU 5667 Sequence 矩阵快速幂 + 费马小定理
olion August will eat every thing he has found. Now there are many foods,but he does not want to eat all of them at once,so he find a sequence. fn⎧⎩⎨⎪⎪1,ab,abfcn−1fn−2,n1n2otherwise He gives you 5 numbers n,a,b,c,p,and he will eat fn foods.B…...
ACID中C与CAP定理中C的区别
转载自 ACID中C与CAP定理中C的区别 ACID和CAP定理中都有C,代表Consistent一致性,很多人容易将这两个C混为一谈,其实这两个一致性是有区别的。 事务的定义是一系列操作要么全部成功,要么全部不成功,数据库的事务机制是…...

Gym - 100589A Queries on the Tree 树状数组+分块
题目链接:https://vjudge.net/problem/Gym-100589A 题意:n个点,根节点为1的树,两种操作,1 L y 与根节点距离为L的节点权值全部加上y,2 x x子树的权值总和 题解:对于更新操作,因为更…...

CodeForces - 1073C Vasya and Robot
Vasya has got a robot which is situated on an infinite Cartesian plane, initially in the cell (0,0) . Robot can perform the following four kinds of operations: U — move from (x,y) to (x,y1) ;D — move from (x,y)to (x,y−1);L — move from (x,y)to (x−1,…...
JDBC面试问题
转载自 JDBC面试问题 1.什么是JDBC API,何时使用它? Java DataBase Connectivity API允许我们使用关系数据库。JDBC API接口和类是 java.sql和javax.sql包的一部分。我们可以使用JDBC API来获取数据库连接,在数据库服务器中运行SQL查询和…...