构造函数与原型对象

news2025/7/18 9:26:56

一、构造函数与原型对象

1、构造函数

作用:主要用于创建对象,初始化对象的属性

1、ES5中创建构造函数然后创建对象

function Student(id,name){
    this.id = id,
    this.name = name
}

let s1 = new Student(001,'小王')

2、ES6中创建类,给类单独定义构造函数

class Student{
    constructor(id,name){
        this.id = id,
        this.name = name
    } 
}

let s1 = new Student(001,'小王')

注:通常把用构造函数创建对象的过程称为类的实例化,对象就是类的实例

2、构造函数的成员或类的成员

(1)成员:类的成员包括属性、方法(行为),通常将属性称为成员变量,把方法(行为)称为成员函数(成员方法)

(2)成员变量又称为实例变量:用类或构造函数创建的对象都具有相同的属性和方法

class Person{
    constructor(id,name){
        this.id = id,
        this.name = name
    }
    display(){
        console.log('编号:',this.id)
        console.log('姓名:',this.name)
    }
}
let p1 = new Person('001','小王')
let p2 = new Person('001','小李')

注:创建的对象属性和方法相同,但他们在内存中的存储空间不同

(3)静态成员:通过构造函数名或类名直接访问的成员。不属于任何对象,为类的所有对象(实例共享的) 静态成员也称为类成员

//ES6中定义方式
class Student{
    constructor(id,name){
        Student.sname = '清华大学',//sname是静态成员,可通过类名直接访问,类成员为类的所有对象共享
        this.id = id,    //id是实例成员 ,属于具体的实例(对象)
        this.name = name  //name是实例成员
    }
    
    display(){
        console.log('学校',Student.sname);
        console.log('学号',this.id);
        console.log('姓名',this.name);
    }
}
let stu1 = new Student('001','小王');
stu1.display();
console.log('---------------------')
let stu2 = new Student('002','小李');
stu2.display();
console.log('---------------------')
let stu3 = new Student('003','小张');
stu3.display();

console.log('---------------------')
Student.sname = '北京大学';
stu1.display();
stu2.display();
stu3.display();
// ES5静态成员写法
function Student(id,name){
    this.id = id,
    this.name = name,
    Student.sname = '清华大学'//静态成员
    this.display = function(){
        console.log('学校',Student.sname);
        console.log('学号',this.id);
        console.log('姓名',this.name);
    }

}

(4)构造方法和类的区别

        1、构造函数中定义的函数,本质是属性,需要占存储空间

        2、在类中定义的函数,不是属性,不需要占用存储空间。即在创建类的对象的过程中,只给对象的属性分配存储空间,对象的函数不占空间,因此节省了内存空间

3、原型对象

(1)每个构造函数都存在一个原型对象,通过构造函数的prototype属性访问

        a、构造函数的原型对象:是object类型的,通过prototype属性可以访问到

        b、作用:通过原型对象可以给构造函数增加新的功能,新的功能可以被共享给构造函数所创建的所有对象

(2)对象的原型对象:js中每个对象都有一个原型对象,通过__proto__属性来获取

(3)实例对象和原型对象的关系

 

(4)对象的构造函数:通过对象的原型对象来获取,在对象的原型对象中有一个属性constructor属性,代表了对象的构造函数。

(5)构造函数、原型对象和实例对象之间的关系

 

(6)原型链

        1、通过构造函数的prototype属性找到构造函数的原型对象,通过构造函数的原型对象的constructor找到构造函数

        2、通过构造函数创建实例对象,通过实例对象的__proto__属性可以找到对象的原型对象,也可以通过对象的原型对象的constructor找到构造函数
把以上两种找原型对象个和构造函数的过程称为原型链

(7)原型对象的原型对象:原型对象也是一个对象,那么它也有原型对象

(8)原型链结构特点:

        1、每个构造函数都有一个prototype属性指向原型对象

        2、原型对象通过constructor属性指向构造函数

        3、通过实例对象的__proto__属性可以访问原型对象

              注:Object的原型对象的__proto__属性为null 

 

(9)JavaScript中成员的查找机制

        1、首先查找对象中有没有成员(属性)

        2、如果没有找到,就继续查找原型对象的原型对象

        3、如果直到最后都没有找到,则返回undefined

function Person(){
    this.username = '小花'//在这里定义了Person的成员username,则下面查找
    this.sayHello = function(){
        console.log('Hello Monday~')
    }
}
let p1 = new Person();
console.log('###',p1.username);//p1的原型对象Person中没有username这个成员,所以继续查找的Person的原型对象Object中查找 一直未找到 所以返回undefined

Object.prototype.username = '小草';//在Object的原型对象上定义username属性
console.log('---',p1.username);//在输出p1.username时会逐层向上查找 最终在Object原型对象上找到该属性 输出'小草

二、this的指向问题

1、在构造函数内部this指向新创建的对象

2、直接通过函数名调用函数时,this代表的是全局对象window对象 

3、如果将函数作为对象的方法调用,this将会指向该对象

三、JavaScript中的错误处理

1、使用try-catch进行处理

try{

        代码段   //有可能会产生错误

}catch(错误对象){

        代码段  //产生错误后所执行的代码

}

执行过程:

(1)若try{}中的代码出现了错误,js会根据错误的类型生成错误对象,然后将该错误对象抛出去

(2)catch会接收try抛出的错误对象,然后对错误进行处理

(3)若try{}中的代码出现错误,try{}中余下的代码就停止执行,转到catch下执行

(4)最后继续执行try-catch之后的代码

let obj = {}

try {
    // 生成一个error对象
    let err = new Error('函数没有定义');
    // obj.show();
    // 将生成的err抛出
    throw err;
} catch (error) {
    console.log(error)
}
console.log('------------');

2、常见的错误类型

(1)Error:表示普通错误,其他的错误对象都是从该对象派生而来

(2)RangeError:数值超出有效范围

(3)ReferenceError:引用了一个不存在的变量

(4)SyntaxError:语法错误

(5)TypeError:类型错误

3、throw:是JavaScript中的关键字,用于在try中抛出错误对象

四、查找算法

1、顺序查找:按照数组集合中元素的存放顺序次数依次操作(按顺序依次比较每个元素)

let arr = [89,10,23,99,45,110]
// 在数组arr中查找一个数,找到返回其下标,若没有找到则返回-1
function findNum(arr,num){
    for(let i =0;i<arr.length;i++){
        if(arr[i] === num){
            return i;
        }
    }
    return -1;
}
let k = findNum(arr,99);
console.log(k);

2、折半查找(二分法查找)

(1)前提条件:被查找的集合或数组必须是有序的

(2)每次查找时先和被查找区间的中间元素进行比较,若大于中间元素,则继续在被查找区间的右区间查找,若小于中间元素,则在被查找区间的左区间中查找,如此循环,直到查找结束。

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

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

相关文章

Java反应式编程(3)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 在前面的文章中已经把vert.x框架给跑起来了&#xff0c;但是实际开发中服务端是需要响应客户端的请求的&#xff0c;所以肯定需要增加接口&#xff0c;但是该怎么…

【华为OD机试真题 python】 绘图机器【2022 Q4 | 100分】

■ 题目描述 绘图机器的绘图笔初始位置在原点(0,0)机器启动后按照以下规则来进行绘制直线。 1. 尝试沿着横线坐标正向绘制直线直到给定的终点E 2. 期间可以通过指令在纵坐标轴方向进行偏移&#xff0c;offsetY为正数表示正向偏移,为负数表示负向偏移 给定的横坐标终点值E 以…

Timesnet: Temporal 2d-variation modeling for general time series analysis

Timesnet: Temporal 2d-variation modeling for general time series analysis (ICLR 2022) 时间序列分析在天气预报、异常检测、行为识别等领域有着广泛的应用。针对时序变化建模这一广泛分析任务的共同关键问题进行了研究。之前的方法试图直接从一维时间序列中实现这一点,由…

Java线程池如何实现线程复用

线程池把线程和任务进行解耦&#xff0c;线程归线程&#xff0c;任务归任务&#xff0c;摆脱了通过 Thread 创建线程时“一个线程必须对应一个任务”的限制。在线程池中&#xff0c;同一个线程可以从 BlockingQueue 中不断提取新任务来执行&#xff0c;其核心原理在于线程池对 …

学生动漫网页设计模板下载你的名字 大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业&#xff0c;茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作…

图像增强之灰度变换和直方图均衡化(附代码python+opencv)

一、图像增强的概念和分类 概念&#xff1a;图像增强是采用一系列技术去改善图像的视觉效果&#xff0c;或将图像转换成一种更适合于人或机器进行分析和处理的形式。例如采用一系列技术有选择地突出某些感兴趣的信息&#xff0c;同时抑制一些不需要的信息&#xff0c;提高图像的…

(JVM)双亲委派机制

Java 虚拟机对 class 文件采用的是按需加载的方式&#xff0c;也就是说当需要使用该类时才会将它的 class 文件加载到内存生成 class 对象。而且加载某个类的 class 文件时&#xff0c;Java 虚拟机采用的是双亲委派模式&#xff0c;即把请求交由父类处理&#xff0c;它是一种任…

文档基础模型引领文档智能走向多模态大一统

编者按&#xff1a;自2019年以来&#xff0c;微软亚洲研究院在文档智能领域进行了诸多探索&#xff0c;开发出一系列多模态任务的文档基础模型 (Document Foundation Model)&#xff0c;包括 LayoutLM (v1、v2、v3) 、LayoutXLM、MarkupLM 等。这些模型在诸如表单、收据、发票、…

MySQL中find_in_set函数的使用

1.语法 FIND_IN_SET(str,strlist) &#xff08;1&#xff09;str 要查询的字符串 &#xff08;2&#xff09;strlist 字段名&#xff1b; 参数以”,”分隔 如 (1,2,6,8) 查询字段(strlist)中包含(str)的结果&#xff0c;返回结果为null或记录 假如字符串str在由N个子链组成的…

5G无线技术基础自学系列 | 物理上行控制信道

素材来源&#xff1a;《5G无线网络优化实践》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 PUCCH用于传输上行控制信息&#xff08;U…

岭回归、Lasso回归和弹性网络

减少过拟合的一个好方法是对模型进行正则化&#xff08;即约束模型&#xff09;&#xff1a;它拥有的自由度越少&#xff0c;则过拟合数据的难度就越大。正则化多项式模型的一种简单方法是减少多项式的次数。 对于线性模型&#xff0c;正则化通常是通过约束模型的权重来实现的。…

记一次生产中使用CompletableFuture遇到的坑

为什么使用CompletableFuture 业务功能描述&#xff1a;有一个功能是需要调用基础平台接口组装我们需要的数据&#xff0c;在这个功能里面我们要调用多次基础平台的接口&#xff0c;我们的入参是一个id&#xff0c;但是这个id是一个集合。我们都是使用RPC调用&#xff0c;一般…

【22年11月12日更新】搭建宝塔面板、青龙面板“京东代挂”

本文章仅供学习 一、青龙面板是什么&#xff1f; 青龙面板可以运行某东脚本&#xff0c;你在某宝、某度等各个渠道搜索“京东代挂”&#xff0c;都是用青龙面板。 二、搭建宝塔面板 1.更新 yum 包 首先下载finalshell通过账号密码连接服务器&#xff0c;然后输入 yum up…

零基础程序员想要学好.Net,跟着这7个步骤学习就可以了

作为一个初学者程序员&#xff0c;很喜欢问的一个问题就是&#xff1a;零基础如何自学编程&#xff1f;在后台也有很多读者私信我&#xff0c;问我这个问题&#xff0c;其实这个问题比较大&#xff0c;不是一两句就可以说清楚的。 所以&#xff0c;今天结合我个人的经历&#x…

注意力机制详解(Attention详解)

注意力机制与人眼类似&#xff0c;例如我们在火车站看车次信息&#xff0c;我们只关注大屏的车次信息&#xff0c;而忽略大屏外其他内容&#xff0c;从而导致钱包被偷。。。 注意力机制只关注重点信息&#xff0c;忽略不重要的信息&#xff0c;关注最核心的内容。 主要就是这…

推荐系统实战2——EasyRec 推荐框架环境配置

推荐系统实战2——EasyRec 推荐框架环境配置学习前言先验条件EasyRec仓库地址EasyRec环境配置一、EasyRec的下载二、EasyRec的初始化三、EasyRec的安装四、一些额外的情况学习前言 EasyRec是阿里巴巴开源的推荐系统框架。生命苦短&#xff0c;从建好的推荐系统框架开始学&…

【C++】STL简介 -- string 的使用及其模拟实现

文章目录一、STL 简介1、什么是 STL2、STL 的版本3、STL 的六大组件4、STL 的重要性5、如何学习 STL二、string 类的使用1、什么是 string2、string 类模板3、构造函数4、Iterators5、Capacity6、Element Access7、Modify8、String Operations9、Non-member function overloads…

Arduino程序设计(二) 按键控制LED灯

按键控制LED灯程序设计前言一、按键控制LED灯——内部上拉&#xff08;基础&#xff09;二、按键控制LED灯——外部上拉&#xff08;基础&#xff09;三、按键控制LED灯&#xff08;进阶&#xff09;总结参考文献前言 本文主要介绍三种按键控制LED灯的实现方式&#xff0c;分别…

PatchCore原理与代码解读

paper&#xff1a;Towards Total Recall in Industrial Anomaly Detection code&#xff1a;GitHub - amazon-science/patchcore-inspection 存在的问题 目前无监督缺陷检测常用的一种方法是直接利用在ImageNet上预训练的模型中的表示&#xff0c;而不专门进行目标分布的迁…

从零开始将图片信息和空间信息绑定,并在前端展示到地图

作者&#xff1a;xiaoyan 关键词&#xff1a;前端查询时展示和空间数据绑定的图片资源 本文适合零基础入门 背景&#xff1a;iServer支持空间查询&#xff0c;可以将空间数据属性表中的属性查询出来&#xff0c;如通过SQL语句查询出某地大楼实际层高&#xff0c;或者查询出某…