首页 > 编程语言 >Web应用课 3.3 JavaScript——对象、数组、函数、类、事件

Web应用课 3.3 JavaScript——对象、数组、函数、类、事件

时间:2024-07-26 11:41:09浏览次数:8  
标签:function Web console log JavaScript 3.3 addEventListener event 函数

对象

英文名称:Object。
类似于C++中的map,由key:value对构成。
value可以是变量、数组、对象、函数等。
函数定义中的this用来引用该函数的“拥有者”。
eg.

let person = {
    name:'zjq',
    age: 18,
    money: 100,
    friends : ['yxc','Bob','Lucy'],//对象成员可以是数组
    clothes: { //对象成员也可以是对象
        color: 'red',
        price: 20,
    },
    add_money:function(x){ //对象行为函数
        this.money += x;
    },
};

function main(){
    console.log(person);
    console.log(person["money"]);//访问person的成员money,必须有引号
    person["add_money"](100);//调用person成员函数,参数为100,必须有引号
    console.log(person["money"]);//访问person的成员money,必须有引号
    
    let key = "name";
    console.log(person[key]);//通过键值对方式访问person成员money

    delete person.name;//删除对象的成员name
}

export{
    main
};

数组

数组是一种特殊的对象。
类似于C++中的数组,但是数组中的元素类型可以不同
数组中的元素可以是变量、数组、对象、函数。

let a = [1, 2, "a", "yxc"];

let b = [
    1,  // 变量
    "yxc",  // 变量
    ['a', 'b', 3],  // 数组
    function () {  // 函数
        console.log("Hello World");
    },
    { name: "yxc", age: 18 }  // 对象
];

数组元素的访问

通过下标。

function main(){
    console.log(b[3]);
    b[3] = function(){ //重新赋值元素
        console.log("hhh");
    }
    b[3]();//执行b[3]元素函数
    console.log(b[3]);
    console.log(b[-1]);
    console.log(b[10]);//js中没有数组越界的概念,返回undefined
}

数组的常用属性和函数

  • 属性length:返回数组长度。注意length是属性,不是函数,因此调用的时候不要加()
  • 函数push():向数组末尾添加元素
  • 函数pop():删除数组末尾的元素
  • 函数splice(a, b):删除从a开始的b个元素
  • 函数sort():将整个数组从小到大排序
  • 自定义比较函数:array.sort(cmp),函数cmp输入两个需要比较的元素,返回一个实数,负数表示第一个参数小于第二个参数,0表示相等,正数表示大于。
function main(){
    console.log(a);
    a.sort(function(a,b){
        return a - b;//若a>b,则a - b > 0,表明排序时遵循正序(升序)
    });
    console.log(a);
    a.sort(function(a,b){
        return b - a;//若a>b,则b - a < 0,表明排序时遵循逆序(降序)
    });
    console.log(a);
}

函数

函数是用对象来实现的。
函数也与C++中的函数类似。

定义方式

function add(a, b) {
    return a + b;
}

let add = function (a, b) {
    return a + b;
}

let add = (a, b) => {
    return a + b;
}

返回值

如果未定义返回值,则返回undefined。

let f = (a,b) => {
    return () =>{
        console.log("Hello");
    }
};
function main(){
    console.log(f(3,4)());//执行打印"Hello"并输出undefined
    
}

与C++中的Class类似。但是不存在私有成员。
this指向类的实例。
每个前端的组件可以定义为class

定义

class Point{
    
    constructor(x,y){ //构造函数
        this.x = x;//成员变量
        this.y = y;
    }

    init(){
        this.sum = this.x + this.y;// 成员变量可以在任意的成员函数中定义
    }

    toString(){
        return `(${this.x}, ${this.y})`;
    }
}

继承

class ColorPoint extends Point{ //继承自Point
    constructor(x,y,color){
        super(x,y);//在子类的构造函数中,只有调用super之后,才可以使用this关键字。
        this.color = color;
    }

    toString(){
        return `${this.color} ${super.toString()}`;
    }
}

注意事项

  • super这个关键字,既可以当作函数使用,也可以当作对象使用。
    • 作为函数调用时,代表父类的构造函数,且只能用在子类的构造函数之中。
    • super作为对象时,指向父类的原型对象
  • 在子类的构造函数中,只有调用super之后,才可以使用this关键字。
  • 成员重名时,子类的成员会覆盖父类的成员。类似于C++中的多态。

静态方法

在成员函数前添加static关键字即可。静态方法不会被类的实例继承,只能通过类来调用
但是静态方法可以被子类继承

class ColorPoint extends Point{ //继承自Point
    static print_class_name(){
        console.log("ColorPoint");
    }
}
function main(){
	ColorPoint.print_class_name();
}

静态成员变量

在ES6中,只能通过class.propname定义和访问。
静态成员变量可以被子类继承

class Point{
    
    constructor(x,y){ //构造函数
        this.x = x;//成员变量
        this.y = y;
        Point.cnt++;//访问静态变量
    }

    init(){
        this.sum = this.x + this.y;// 成员变量可以在任意的成员函数中定义
    }

    toString(){
        return `(${this.x}, ${this.y})`;
    }
}

Point.cnt = 0;//定义静态变量

function main(){
    for(let k = 0;k < 5;k++){
        new Point(1,2);
        console.log(Point.cnt);
    }

    for(let k = 0;k < 5;k++){
        new ColorPoint(1,2);
        console.log(Point.cnt);
    }
}

事件:让js与页面产生联系

JavaScript的代码一般通过事件触发。
可以通过addEventListener函数为元素绑定事件的触发函数。

常见的触发函数

鼠标

  • click:鼠标左键点击
  • dblclick:鼠标左键双击
  • contextmenu:鼠标右键点击
  • mousedown:鼠标按下,包括左键、滚轮、右键
  • event.button:0表示左键,1表示中键,2表示右键
  • mouseup:鼠标弹起,包括左键、滚轮、右键
  • event.button:0表示左键,1表示中键,2表示右键

示例

let div = document.querySelector("div");

function main(){
    div.addEventListener("contextmenu",function(event){
        console.log(event.type,event.button);
    });
    div.addEventListener("mousedown",function(event){
        console.log(event.type,event.button);
    });
    div.addEventListener("mouseup",function(){
        console.log(event.type,event.button);
    });
}

export{
    main
};

键盘

  • keydown:某个键是否被按住,事件会连续触发
    event.code:返回按的是哪个键
    event.altKey、event.ctrlKey、event.shiftKey分别表示是否同时按下了alt、ctrl、shift键。
  • keyup:某个按键是否被释放
    event常用属性同上
  • keypress:紧跟在keydown事件后触发,只有按下字符键时触发。适用于判定用户输入的字符。
    event常用属性同上
    keydown、keyup、keypress的关系类似于鼠标的mousedown、mouseup、click
    补充:为div添加可聚焦属性,以支持键盘事件监听
<!-- 指示其元素是否可以聚焦,以及它是否/在何处参与顺序键盘导航(通常使用Tab键,因此得名)。 -->
<div tabindex="0">1</div>

textarea.addEventListener("keydown",event =>{
        console.log(event.type,event.code);
    });

    textarea.addEventListener("keyup",event =>{
        console.log(event.type,event.code);
    });

    textarea.addEventListener("keypress",event =>{
        console.log(event.type,event.code);
    });

表单

  • focus:聚焦某个元素
  • blur:取消聚焦某个元素
    textarea.addEventListener("focus",event => {
        console.log(event.type);
    });
    textarea.addEventListener("blur",event => {
        console.log(event.type);
    });
  • change:某个元素的内容发生了改变

窗口

需要作用到window元素上。

  • resize:当窗口大小放生变化
  • scroll:滚动指定的元素
  • load:当页面所有元素被加载完成
    textarea.addEventListener("focus",event => {
        console.log(event.type);
    });
    textarea.addEventListener("blur",event => {
        console.log(event.type);
    });
    window.addEventListener("resize",event =>{
        console.log(event.type);
    });
    window.addEventListener("scroll",event =>{
        console.log(event.type);
    });
    window.addEventListener("load",event =>{
        console.log(event.type);
    });

标签:function,Web,console,log,JavaScript,3.3,addEventListener,event,函数
From: https://www.cnblogs.com/zjq182/p/18275724

相关文章

  • JavaScript操作BOM与DOM
    BOM操作window对象window对象是整个BOM的核心,表示浏览器打开的窗口。属性属性                              描述history     用户访问过的URL信息(历史记录)location        当前URL的信息。screen   ......
  • (Javaweb)Vue
    目录一.Vue概述二Vue指令三.vue生命周期一.Vue概述1.model--数据模型:包含了很多的业务数据以及数据的处理方法2.view--视图层--数据的展示--DOM元素3.viewmodel--完成数据绑定的核心,实现model与viewmodel之间的数据连接其中,MVVM由三部分组成,model,view,viewmodelm......
  • (Javaweb)js
    目录一.js介绍二.引入方式三.js基础语法1.书写语法2.js变量3.数据类型运算符流程控制语句 四.js函数五.js对象六.js对象--Array数组七js对象--String字符串八.js对象--JSON九.js对象--BOM十.js对象--DOMDOM案例一.js介绍脚本语言:代码不需要进行编译,直......
  • JavaScript 基础
    JavaScript简介JavaScript是一种具有函数优先原则的轻量级、解释型、即时编译型的编程语言。函数优先原则:函数可以和其他任何变量一样对待,而且函数的优先级会被提升。.轻量级:语法和Java类似,语法简单易学。解释型:代码在运行时直接由解释器逐行解释和执行,而不需要事先将......
  • JavaWeb笔记_JSTL标签库&JavaEE三层架构案例
    一.JSTL标签库1.1JSTL概述 JSTL(jspstandardtaglibrary):JSP标准标签库,它是针对EL表达式一个扩展,通过JSTL标签库与EL表达式结合可以完成更强大的功能  JSTL它是一种标签语言,JSTL不是JSP内置标签  JSTL标签库主要包含:   ****核心标签     ......
  • 探索WebKit的CSS表格布局:打造灵活的网页数据展示
    探索WebKit的CSS表格布局:打造灵活的网页数据展示CSS表格布局是一种在网页上展示数据的强大方式,它允许开发者使用CSS来创建类似于传统HTML表格的布局。WebKit作为许多流行浏览器的渲染引擎,提供了对CSS表格布局的全面支持。本文将深入探讨WebKit如何实现对CSS表格布局的支持,......
  • 基于javaweb+mysql数据库实现的宠物领养|流浪猫狗网站
    《基于javaweb+mysql数据库实现的宠物领养网站》该项目含有源码、文档等资料、配套开发软件、软件安装教程、项目发布教程等使用技术:前端使用技术:JSP,HTML5,CSS3、JavaScript等后台使用技术:Servlet、Jdbc等数据库:Mysql数据库项目功能介绍:本系统为基于jsp+mysql的宠物领养......
  • JavaScript(数组)
    今天学习了数组,最为重要的就是数组方法,其次就是遍历,这在作业中用的是最多的。学完发现用数组方法完成作业,比用循环写代码量要少很多。作业1:定义一个数组[1,5,6,99,5,66,7,4,1,6,9]去掉数组里面的重复值(两种方法)第二种方法因为set不明白所以打了注释(借鉴了......
  • JavaScript基础
    代码作业1:1.运用所学知识完成加法器a)用户输入第一个数b)用户输入第二个数c)最后以“最终的结果为xx”输出<script>    vara=prompt('number1'),    b=prompt('number2');    varc=Number(a)+Number(b); ......
  • Vue3-WebOS网页版os系统|vite5+pinia2+arco-design仿macOS桌面os管理
    原创Vue3+Pinia2+ArcoDesign仿macOS桌面网页版os管理系统ViteMacOS。vite5-vue3-macos基于最新前端技术vite5.x+vue3+pinia2+arco.design+sortablejs+echarts构建网页版osx后台管理系统新解决方案。支持windows+macos两种桌面模式、自定义桌面栅格布局引擎、可拖拽式桌面菜单/程......