【第六部分 | JavaScript高级】1:面向对象

news2024/11/16 11:43:20

目录

【第一章】面向对象

| Class创建、构造函数、方法

| Class继承

| 三个注意点

| 静态成员

| 原型对象 __ _proto___

| 类的本质


【第一章】面向对象

| Class创建、构造函数、方法

创建类

class name {
	// class body
}

var xx = new name()

构造函数

class Person {
    constructor(name,age) { // constructor 构造方法或者构造函数
        this.name = name;
        this.age = age;
    }
}

 类内方法

class Person {
    constructor(name,age) { // constructor 构造器或者构造函数
        this.name = name;
        this.age = age;
    }
    say() {
    	console.log(this.name + '你好');
    }
}

 代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        class Person {
            //构造函数 默认名字是constructor(){}
            constructor(name , age){
                //JS可以动态生成熟悉
                this.name = name;
                this.age = age;
            }

            //类内方法  不需要加function,不需要加逗号
            say(){
                console.log(this.name + '你好');
            }
        }

        //实例化对象
        var person = new Person('Klee',8);
        person.say();//Klee你好
        
    </script>
</head>
<body>
    
</body>
</html>

| Class继承

继承

class Father{ 
    // 父类
}

class Son extends Father { 
    // 子类继承父类
}

super关键字

代码示例

class Father {
	constructor(surname) {
		this.surname = surname;
	}
    
	saySurname() {
		console.log('我的姓是' + this.surname);
	}
}



class Son extends Father { // 这样子类就继承了父类的属性和方法
	constructor(surname, fristname) {
		super(surname); // 调用父类的constructor(surname)
		this.fristname = fristname;
	}
	sayFristname() {
		console.log("我的名字是:" + this.fristname);
	}
}



var damao = new Son('刘', "德华");
damao.saySurname();
damao.sayFristname();

 


| 三个注意点

| 静态成员

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        class Person {
            
        }

        //实例化对象
        var person = new Person('Klee',8);
		person.objName = 'objName'; //通过类的实例对象声明的变量,只可通过对应的成员调用
		Person.className = 'className';//通过类直接声明的变量是静态变量,只可用类名调用
        console.log(person.objName);//objName
        console.log(person.className);//Undefined
        console.log(Person.objName);//Undefined
		console.log(Person.className);//className
    </script>
</head>
<body>
    
</body>
</html>

 

| 原型对象 __ _proto___

  • 构造函数的缺点:每创建一个新对象,就要在内存中开辟一个新的内存空间给构造函数。

  • 因此,我们可以把所有对象公用的属性、方法,放进原型对象prototype中

  • prototype是每个对象都有的一个内置对象。对象都会有一个属性 proto 指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性和方法,就是因为对象有 proto 原型的存在

  • proto对象原型和原型对象 prototype 是等价的

  • proto对象原型的意义就在于为对象的查找机制提供一个方向,或者说一条路线,但是它是一个非标准属性, 因此实际开发中,不可以使用这个属性,它只是内部指向原型对象 prototype

  • 对象原型( proto)和构造函数(prototype)原型对象里面都有一个属性 constructor 属性 ,constructor 我们称 为构造函数,因为它指回构造函数本身。

  • 一般情况下,对象的方法都在构造函数的原型对象中设置。如果有多个对象的方法,我们可以给原型对象采取对象形式赋 值,但是这样就会覆盖构造函数原型对象原来的内容,这样修改后的原型对象 constructor 就不再指向当前构造函数了。 此时,我们可以在修改后的原型对象中,添加一个 constructor 指向原来的构造函数

  • JavaScript 成员查找机制:

 

 

  • 一般,我们把公共属性放在构造函数中;把公共方法,放到原型对象身上

  • 构造函数中的this 指向我们实例对象. 原型对象里面放的是方法, 这个方法里面的this 指向的是 这个方法的调用者, 也就是这个实例对象.

    即:构造函数、原型函数的this,都指向【 【当前调用该构造/原型函数】的实例对象】

  • 代码示例:

| 类的本质

 

 

 

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

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

相关文章

【Godot】数据响应的方式执行功能

Godot Engine 版本&#xff1a;4.0 beta 6 下载地址&#xff1a;Index of /godotengine/4.0/beta6/ (downloads.tuxfamily.org) 在这个教程中&#xff0c;学会理解以数据为主的进行处理执行逻辑的代码编写方式&#xff0c;虽然看似简单&#xff0c;但是确是方便又好用。 以及下…

Git使用教程

Git项目的三个工作区域的概念&#xff1a; 1、Git仓库Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分&#xff0c;从其它计算机克隆仓库时&#xff0c;拷贝的就是这里的数据。 2、工作目录工作目录是对项目的某个版本独立提取出来的内容…

Ansible之 AWX 创建管理项目的一些笔记

写在前面 分享一些 AWX 创建管理项目的笔记博文内容涉及&#xff1a; 容器化 AWX 手工创建项目Demo通过 SCM 创建项目 Demo项目角色&#xff0c;更新策略介绍&#xff0c;SCM 凭据的创建 食用方式&#xff1a; 需要了解 Ansible理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐…

ssm项目改造spring boot项目

快速创建 Spring Boot 项目 添加依赖 如果是普通 Maven 项目&#xff0c;需要手动添加。 <!-- 打包方式 jar 包 --> <packaging>jar</packaging><!-- 指定父工程 --> <parent><groupId>org.springframework.boot</groupId><ar…

操作系统学习笔记(Ⅰ):概述

目录 1 操作系统概念 1.1 定义 1.2 功能 1.系统资源的管理者 2.用户和计算机硬件间接口 3.最接近硬件的层次 2 操作系统的特征 2.1 并发 2.2 共享 2.3 虚拟 2.4 异步 3 发展和分类 3.1 手工操作阶段 3.2 批处理阶段 1.单道批处理阶段 2.多道批处理系统 3.3 分…

启明欣欣STM32开发板闪烁LED实验

最近在咸鱼上买了一块启明欣欣的STM32板子&#xff0c;准备在上面测试open62541和CANopen&#xff0c;到货后如下图&#xff0c; 找商家要了资料&#xff0c;然后运行一个LED灯的实验来简单测试下板子&#xff0c;本文记录一下这个过程。 一 准备 安装Keil 5.35&#xff0c;安…

【selection】 学习光标API并实现编辑区插入表情图片的功能

目录场景介绍selection介绍selection APIrange 介绍range API实现编辑区插入表情图片参考资料场景介绍 在写web版聊天器时&#xff0c;遇到一个需求&#xff1a; 聊天时用户可以在编辑区加入表情图片&#xff0c;并且表情图片要插入在光标位置。// *web版聊天器地址&#xff…

useMemo 使用误区

文章の目录问题背景useMemo 使用前后组件性能对比结论问题背景 在某一个h5项目中&#xff0c;使用了 useMemo 对项目中的组件进行优化&#xff0c;减少组件不必要的re-render, 优化后的结果&#xff1a; 在组件的props和状态未改变时&#xff0c;组件不再进行 re-render 表面上…

生意不好如何逆风翻盘 | 多门店经营必读技巧(1):导购管理 连锁店管理的技巧 连锁店生意经 如何做导购管理

很多连锁店老板反馈&#xff0c;为了优化门店的销售业绩&#xff0c;什么方法都试过了&#xff0c;改店铺陈列、搞优惠活动、做会员管理.......为什么分店的业绩还是看不到明显的提升&#xff1f; 方法试过了&#xff0c;结果没变化&#xff0c;那只能是执行这块出了问题&#…

量子计算(八):观测量和计算基下的测量

文章目录 观测量和计算基下的测量 一、观测量 二、计算基下的测量 三、投影测量 观测量和计算基下的测量 一、观测量 量子比特&#xff08;qubit&#xff09;不同于经典的比特&#xff08;bit&#xff09;&#xff0c;一个量子比特|>可以同时处于|0>和|1>两个状态…

Linux从入门到精通(八)——Linux磁盘管理

文章篇幅较长&#xff0c;建议先收藏&#xff0c;防止迷路 文章跳转Linux从入门到精通&#xff08;八&#xff09;——Linux磁盘管理goLinux从入门到精通&#xff08;九&#xff09;——Linux编程goLinux从入门到精通&#xff08;十&#xff09;——进程管理goLinux从入门到精…

C++ 结合mysql写一个服务端

1 libhv和mysql libhv是一个跨平台的C网络库。 mysql是一个关系型数据库。 2 下载MySQL&#xff0c; 最好不要下载高版本的&#xff0c;容易出错&#xff01;&#xff01;&#xff01; 下载地址MySQL 下载好后目录是这样的&#xff1a; 然后在环境变量里配置&#xff1a;…

Hive 3.1.3

1.下载安装包 Index of /hive/hive-3.1.3https://dlcdn.apache.org/hive/hive-3.1.3/ 2.安装&修改配置文件 2.1 安装MySQL a. 搜索centos7默认的mariadb & 卸载 [root@node1 ~]# rpm -qa | grep mariadb mariadb-libs-5.5.44-2.el7.centos.x86_64 卸载 [r…

【计算机组成原理Note】5.4.2 控制器-微程序

5.4.2 控制器-微程序 硬布线工作原理&#xff1a;微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序&#xff0c;即时产生微程序工作原理&#xff1a;事先把微操作控制信号存储在一个专门的存储器(控制存储器)中&#xff0c;将每一条机器指令编写成一个微程序&#xf…

差钱吗?周杰伦线上演唱会没关打赏惹争议,看看同时直播的腾格尔

随着世界杯的到来&#xff0c;全球都进入了世界杯时间&#xff0c;音乐领域的明星们&#xff0c;都以各种形式欢迎世界杯的到来。在世界杯开幕的前一晚上&#xff0c;著名音乐人周杰伦&#xff0c;在某手平台开启了线上演唱会&#xff0c;吸引了众多人前来围观。 据不完全统计&…

【正点原子FPGA连载】 第七章 Verilog HDL语法 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第七章 Verilog …

【计组】入门篇 --《深入浅出计算机组成原理》

课程链接&#xff1a;深入浅出计算机组成原理_组成原理_计算机基础-极客时间 目录 一、为什么需要学习计算机组成原理 二、冯诺依曼体系结构&#xff1a;计算机组成的金字塔 1、计算机的基本硬件组成 2、冯诺依曼体系结构 三、通过CPU主频谈性能 1、什么是性能 2、计算…

【微信早安定时推送消息】微信公众号定时推送早安消息 带天气、纪念日、生日、定时推送等(完整代码)

我挥舞着键盘和本子&#xff0c;发誓要把世界写个明明白白。 简介 利用所学知识给他/她一个惊喜&#xff0c;是作为计算机专业的你最大的乐趣。 无计算机基础&#xff0c;5分钟即设置好 &#xff08;定时推送 及 最新版 将在下期带来&#xff09; 获取完整代码&#xff0c;关注…

性能测试怎么做?性能测试重点和各项性能测试流程(超级详细)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 性能测试基础 1&am…

【设计模式】过滤器模式(Filter Pattern)

过滤器模式属于结构型模式&#xff0c;但它并不属于我们常说的二十三种设计模式。主要是以相对解耦的方式来过滤一组对象。 文章目录过滤器模式的介绍优点应用场景过滤器模式的使用类图实现方法第一步&#xff0c;创建员工类第二步&#xff0c;创建过滤器接口第三步&#xff0c…