web学习笔记(二十一)

目录

1.构造函数创建对象

1.1规则

1.2 new关键字调用构造函数时,函数内部做了什么事情?

1.3总结

2.混合模式创建对象

3.JavaScript 继承---借助构造函数

 4.原型链

4.1原型链实现方法继承

5.完美的组合继承

6.call方法的使用


1.构造函数创建对象

1.1规则

(1)构造函数----函数名的首字母要大写eg:Person

 function Student(name, age, gender, no) {this.name1 = name;// 前者是新定义的属性名,后者是我们传进来的形参//绑定属性  this.属性名=属性值(形参上的变量)//属性名和形参的变量可以一致也可以不一致this.age1 = age;this.gender1 = gender;this.no1 = no;this.say1 = function () {console.log(this.name1 + 'is saying');}}var si=new Student('张三','20岁','大一','男');var s2=new Student('李四','22岁','大三','女');var s3=new Student('王五','20岁','大一','女');

  (2)函数内部的实现

         函数内的属性和方法前面需要添加this,表示当前对象的属性和方法

         构造函数中不需要return返回结果

 (3)调用函数

       var 实例对象= new 构造函数名() 

1.2 new关键字调用构造函数时,函数内部做了什么事情?

       (1)在函数内部创建一个空对象-----函数内没写,系统帮忙完成的

       (2)让this指向这个空对象

        (3)执行构造函数内部的代码,在对象上添加属性和方法

        (4)把对象返回----函数内没写return,系统帮忙完成的

1.3总结

  • 构造函数用于创建某一类对象,其首字母要大写。
  • 构造函数要和 new 一起使用才有意义。
  • 构造函数约定首字母大写。
  • 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
  • 构造函数中不需要 return 返回结果。
  • 当我们创建对象的时候,必须用new 来调用构造函数。

2.混合模式创建对象

和构造函数创建对象很像,但混合模式创建对象比构造函数创建对象要好一点,以后应用会更多一点

继承-原型继承 --prototype

之前构造函数创建方法都是this.方法,现在我们使用混合函数创造方法都是把方法从对象里面拎出来,然后通过对象.prototype.方法名=function(){}来创建方法,相当于我们把方法放到了一个公共的区域,大家在调用方法时都是调用同一个方法。

<script>function Person(name, age) {this.name = name;this.gae = age;}Person.prototype.say = function () {console.log(this.name + 'is saying');}Person.prototype.test = function () {console.log(this.name + 'is testing');}var p1 = new Person('张武', 18);var p2 = new Person('李四', 20);p1.test();p2.test();// 这两个方法是同一个,相当于开发了同一个系统</script>
  • JavaScript 是面向对象的语言,但JavaScript不使用类。
  • 在 JavaScript中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)。
  • JavaScript基于prototype, 而不是基于类(构造函数名)的。

3.JavaScript 继承---借助构造函数

        继承就是查找属性和方法的一种机制,先从自身(自己的构造函数)来查,如果有就直接用,如果没有,再从它继承的构造函数中查,直到找到为止,如果一直找不到,方法会报错,属性输出undefined,此时只能继承父构造函数中的方法,而不能继承父构造函数原型上的方法,想要继承父构造函数上的继承方法需要使用原型链来继承。

继承者------子类  派生类

被继承者-----父类   超类 基类

继承父类的方法:   父构造函数.call(this,实参1,实参2)

括号内第一个参数是对象,不一定是this,后续可以进行更换。

             Father.call(this, name, age,say)//Father.call 是调用了父构造函数   this对象 指向是儿子的实例对象  
// name,age是传的实参,在父亲构造函数中借用name和age属性

继承父类的例子:

 <script>//父类function Father(name, age) {this.name = name;this.age = age;this.say = function () {console.log('saying');}}//子类function Son(name, age, no, xueli) {// 继承父亲中的属性和方法Father.call(this, name, age,say)//Father.call 是调用了父构造函数       this对象 指向是儿子的实例对象   //name,age是传的实参,在父亲构造函数中借用name和age属性this.no = no;this.xueli = xueli;this.test = function () {console.log('testing');}}var s1=new Son('廉颇', '20', '1000','本科');console.log(s1.name,s1.age,s1.no,s1.xueli);</script>

 4.原型链

        原型链就是在原型上查方法,是一种查找方法的查找机制。先从自己的原型去查找,如果有方法,就是用,如果没有就向继承的父级对象去查,然后一直沿着原型对象一直向上查,找到就使用,找不到就报错

原型里面大部分放的都是方法,构造函数里面放置基本的属性。

constructor:构造器属性,可以通过这个查找出该原型的构造器

4.1原型链实现方法继承

(1)方法一:子构造函数.prototype=new 父构造函数();
  这个方法不太好用,让会儿子的原型上同时拥有了父亲的属性和方法。此时通过.pototype.constructor查找出来子构造函数的this指向为父构造函数。可以通过回指来解决这个问题:子构造函数.prototype.constructor=子构造函数;

(2) 方法二:子构造函数.prototype=Object.create(父构造函数.prototype); 

5.完美的组合继承

就是借助构造函数然后加上原型链,从而形成完美的组合继承。

父构造函数名.call(this,实参一,实参二);

子构造函数名.prototype=Object.create(父构造函数名.prototype);

子构造函数名.prototype.constructor=子构造函数名;

6.call方法的使用

函数名.call方法是函数的内置方法。无参时和直接调用函数的作用一样。

    function text1(){console.log('aaa');}text1();text1.call();

有参数时:参数一是对象(必传)。参数二及后面是函数的实参,以逗号分割依次传递。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React之数据绑定以及表单处理

一、表单元素 像<input>、<textarea>、<option>这样的表单元素不同于其他元素&#xff0c;因为他们可以通过用户交互发生变化。这些元素提供的界面使响应用户交互的表单数据处理更加容易 交互属性&#xff0c;用户对一下元素交互时通过onChange回调函数来监听…

回溯例题(leetcode17/37)

文章目录 leetcode37leetcode17 回溯跟枚举差不多。要注意“回溯”&#xff0c;别忘记“回”之前把之前的改动都复原。 leetcode37 leetcode37是解数独问题。本题保证有且仅有唯一解。 思路&#xff1a;先把空格子的位置存下来&#xff0c;然后对每一个空位置挨个枚举1-9。枚…

Excel常用公式总结非常实用

16个最实用的Excel万能公式 1、多条件判断 IF(And(条件1,条件2..条件N),条件成立返回值) IF(or(条件1,条件2..条件N),条件成立返回值) 2、多条件查找 Lookup(1,0/((条件1*条件2*...条件N)),返回值区域&#xff09; 3、多条件求和 Sumifs(值区域,判断区域1,条件1,判断区域2,条…

Java 数据库面试题解析(下)

20. Hash索引和B树索引的区别&#xff1f;【重点】 hash索引&#xff1a;等值查询效率高&#xff0c;不能排序&#xff0c;不能进行范围查询&#xff1b; B树索引&#xff1a;数据有序&#xff0c;适合范围查询。 21. MySQL中三种锁的级别&#xff1f;【了解】 表级锁&…

2024最新精华版Java面试题之spring篇

目录 一、Java面试题之spring篇 1、什么是spring? 2、你们项目中为什么使用Spring框架&#xff1f; 3、 Autowired和Resource关键字的区别&#xff1f; 4、依赖注入的方式有几种&#xff0c;各是什么? 5、讲一下什么是Spring容器&#xff1f; 6、说说你对Spring MVC的理…

Java毕业设计-基于springboot开发的私人健身与教练预约系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台功能模块2.1管理员功能2.2用户功能2.3教练功能 四、毕设内容和源代码获取总结 [Java毕业设计-基于springboot…

Android 11.0 内置google tts语音包功能实现

1.前言 在11.0的系统rom产品开发中,在gms的相关项目对于文字转语音包功能不是内置功能,需要自己下载google的tts语音包,然后内置,在设置 google tts语音包apk作为默认的tts语音引擎功能,接下来分析实现这个功能 2.内置google tts语音包功能实现的核心类 frameworks/ba…

Chat GPT4.0:开启智能对话的新纪元

介绍 Chat GPT4.0是基于GPT4.0架构开发的一款强大的智能对话模型。作为人工智能领域的最新进展&#xff0c;Chat GPT4.0引领着智能对话技术的新纪元。本文将探讨Chat GPT4.0的创新之处以及对智能对话发展的推动作用。 Chat GPT4.0的创新之处 Chat GPT4.0在前一版本的基础上进…

c++知识点之 --引用

本质&#xff1a;给变量起别名 语法&#xff1a;数据类型 &别名 原名 特点&#xff1a;传引用比传值的效率高很多 注意事项&#xff1a; 引用必须初始化&#xff0c;且初始化不能为空。引用不能改变引用关系&#xff08;引用的底层是指针常量&#xff08;type * const …

前端 JS 经典:for-in 和 for-of 用法区别

1. for-in 对于 string, object, array 类型使用 for-in const str "qwe"; const arr ["yqcoder", "db"]; const obj {name: "yqcoder",age: 18, };for (let i in str) {console.log(i); // 0 1 2 } for (let i in arr) {console…

简单数据类型和复杂数据类型

1. 简单数据类型 null是个特例: 2. 复杂数据类型 3. 堆和栈 注意&#xff1a; JavaScript 中是没有堆和栈的概念的&#xff0c;通过堆栈的概念可以更好的理解代码的一些执行方式&#xff0c;便于将来学习其他语言。 4. 简单数据类型传参 总结&#xff1a;简单数据类型传参传…

webview_h5与原生增加权限索取行为交互(Flutter)

应各大应用市场上架要求,增加权限索取行为用户交互弹窗 详细: https://developer.huawei.com/consumer/cn/doc/app/FAQ-faq-05#h1-1698326401789-0 flutter端使用permission_handler申请权限注册一个MethodChannel,增加一个函数,提供安卓webview相机/麦克风等权限被触发时回调…

C++写入和读取结构体到二进制文件

二进制文件速度快&#xff0c;空间效率高 写入数据到二进制文件 #include<iostream> #include<fstream> using namespace std; int main() {// 定义一个结构体struct student{int id; // 学号char name[20]; // 姓名double score; // 成…

LeetCode 2369.检查数组是否存在有效划分:动态规划(DP)

【LetMeFly】2369.检查数组是否存在有效划分&#xff1a;动态规划(DP) 力扣题目链接&#xff1a;https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/ 给你一个下标从 0 开始的整数数组 nums &#xff0c;你必须将数组划分为一个或多个 连续 子…

在线ai写作,让你随时随地创作优质内容

如今的ai技术已经渗透到我们生活的方方面面。其中&#xff0c;AI写作成为了一个备受关注的领域。如今&#xff0c;我们可以利用在线ai写作在任何时间、任何地点创作出优质的内容。 传统的写作过程需要大量的时间和精力。从构思到写作再到修改&#xff0c;每一个环节都需要我们投…

Linux进程管理——top字段

目录 1.top下半部分——进程状态 2.top常用内部命令 3.top指定 ①top ②top -d 1 ③top -d 1 -p 10126 ④top -d 1 -p 10126,1 4.使用信号控制进程 1.top下半部分——进程状态 PID&#xff1a;进程号 User&#xff1a;用户 PR/NI&#xff1a;优先级 VIRT&#xff08…

Helm repo 国内镜像配置

微软 http://mirror.azure.cn/kubernetes/charts/ 阿里云 https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts/ 步骤 helm repo add stable http://mirror.azure.cn/kubernetes/charts/ helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/char…

国产软件很流氓?不,这些国产软件良心且实用,别让它们寒心

谈及国产软件&#xff0c;人们常将其与“流氓、捆绑、满屏广告”等负面词汇挂钩。但真实情况是&#xff0c;仍有许多优质国产软件在默默耕耘&#xff0c;它们既免费又实用&#xff0c;别让它们寒了心。 1、Dism Dism是一款专为Windows系统设计的管理优化神器&#xff0c;其开…

ECMAScript 6+ 新特性 ( 六 ) 模块化

2.17. 模块化 模块化是指将一个大的程序文件&#xff0c;拆分成许多小的文件&#xff0c;然后将小文件组合起来。 这样就可以更清晰和结构化的方式组织代码 模块功能主要由两个命令构成&#xff1a;export 和 import export 命令用于规定模块的对外接口 ( 公开 , 暴露) im…

PowerShell 详细介绍

PowerShell 是微软开发的一款功能强大的命令行工具和脚本语言&#xff0c;它基于 .NET Framework 构建&#xff0c;可以帮助系统管理员和开发者自动化各种系统管理和应用程序开发任务。PowerShell 提供了丰富的命令集和脚本功能&#xff0c;可以轻松地管理 Windows 操作系统、应…