JavaScript-ES6面向对象与闭包

news/2024/7/19 13:21:54 标签: js

文章目录

  • 一、面向对象
    • 1.构造函数
    • 2.继承、封装、多态
      • 继承
    • 3.闭包
    • 4.ES6的模块化
      • 4.1 Webpack
        • 4.1.1安装Webpack
      • 4.2 基本操作
      • 4.3 export和import

一、面向对象

在这里插入图片描述

1.构造函数

模拟一个弹窗

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        /**
         * 弹窗
         */
        class Person{
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }

            show() {
                alert(this.name)
            }
        }

        let p = new Person('blue', 18);
        p.show();
    </script>
</head>
<body>

</body>
</html>

2.继承、封装、多态

继承

js"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        /**
         * 弹窗
         */
        class Person{
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }

            show() {
                alert(this.name)
            }
        }

        let p = new Person('blue', 18);
        p.show();

        class Worker extends Person{
            constructor(name, age, job) {
                super(name,age);
                this.job = job;
            }
            show(){
                alert("666");
            }
        }
        let o = new Worker('blue',18,'daza');
        o.show();
    </script>
</head>
<body>

</body>
</html>

3.闭包

底层:栈
高层:将函数当作对象处理

js"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>bibao</title>
    <script>
        /**
         * 闭包思想:
         * GC,垃圾回收思路
         * 每一个方法有一个i,虽然是局部变量,但是由于我们通过onclick操作
         * 会不断使用,所以不会被删除掉,持续存在
         */
        window.onload=function(){
            var aBtn = document.getElementsByTagName('input');

            for (var i = 0; i < aBtn.length; i++) {
                (function (i) {
                    aBtn[i].onclick = function () {
                        alert(i);
                    } ;
                })(i);
            }
        };
    </script>
</head>
<body>
    <input type="button" value="aaa">
    <input type="button" value="bbb">
    <input type="button" value="ccc">
</body>
</html>

闭包的实用性:闭包可以对局部变量进行保存,本质是将方法封装为一个对象。

4.ES6的模块化

使用类似babel的工具webpack将js脚本进行一定的编译,然后就可以就可以令浏览器识别和支持了
实例:
(1) 创建一个mod1.js文件,模拟它的导入,导入到另一个index.js文件内,再由html进行可视化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
很普通的一个程序,我们运行之后发现没有响应,那么可以判断出,浏览器的确不支持ES6的模块化。
那么就来介绍一个打包js的工具,Webpack。

4.1 Webpack

4.1.1安装Webpack

(1)安装npm
http://nodejs.cn/download/
下载10.*版本的安装包进行安装
安装之后添加系统变量到PATH内
(2)安装WebPack

C:\Users\Asus>npm i webpack -g
C:\Users\Asus\AppData\Roaming\npm\webpack -> C:\Users\Asus\AppData\Roaming\npm\node_modules\webpack\bin\webpack.js
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules\webpack\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ webpack@4.32.0
added 324 packages from 199 contributors in 48.882s

安装成功

4.2 基本操作

然后创建一个webpack config.js作为打包js的配置文件设定

const path=require('path');

/**
 * webpack能做的不仅仅是打包,更加适用于项目管理
 * 按照nodejs的规定,必须在相对路径加上./
 * @type {{output: {path: void | Promise<void> | Promise<any>, filename: string}, entry: string}}
 */
module.exports={
    mode: 'production',//生产模式,另外的还有开发模式
    entry: './index.js', //打包的入口
    output: {
        // path: 'G:\\Users\\Administrator\\eclipse-workspace\\JS_oop\\js\\build\\',
        //如果这样设置路径会显得很鸡肋,所以引入nodejs一个path模块
        path: path.resolve(_dirname,'build'),
        //dirname是一个魔术变量,代表当前目录,然后填入第二级变量路径,换句话说绝对路径和相对路径都给了
        filename: 'bundle.js'
    }
};

然后来到目录下使用webpack
webpack编译:
1.entry是入口地址
2.output是输出地址
3.path:绝对路径
4.filename:文件名
5.mode模式
6.所有当前目录之前加上…/

4.3 export和import

export:
export let a = xx;定义一个变量但是可以更改
export const a =xx;定义一个变量无法修改

export(xxx,xxx,xxx)用于集体输出

export function xxx(){}

export class xxx(){}

export default xxx;作为一个默认成员存在

import

import * as mod from “./xxx”;

import {a,b,c} from “./xxx”;

import xxx from ‘./mod’;引入默认成员

import "./xxx"引入默认的模块代码

异步引入

let promise = import("./mod2")像一个广告之类的不着急加载的东西为了不占用主服务器的内存所以,异步引入
假定mod2.js这样引入一个qq变量为abc
在这里插入图片描述

在index.js内进行import异步引入
在这里插入图片描述


http://www.niftyadmin.cn/n/784848.html

相关文章

SOAP协议

1、来源&#xff1a;对于应用程序开发来说&#xff0c;程序之间的互联网通信是很重要的。目前的应用程序使用远程过程调用&#xff08;RPC&#xff09;在诸如DCOM&#xff0c;CORBA等对象之间通信&#xff0c;但是HTTP不是为此设计的。RPC会产生兼容性以及安全问题。通过HTTP在…

i2c协议解析

i2c总线上有两根线&#xff0c;一根是数据线SDA&#xff0c;一根是时钟线SCL 在空闲的时候&#xff0c;他们都是高电平 I2C传输数据快速且简便&#xff0c;速率最高可以达到3.4M/s i2C速率分为S&#xff08;标准, 100kb/s&#xff09;、F&#xff08;快速, 400kb/s&#xff…

Vue框架入门学习(一)——Vue 1.0

文章目录一、简述二、入门介绍1.Vue 1.02.Vue基本指令(directive)2.1 v-bind2.2 v-model 数据双向绑定2.3 v-text2.4 v-html※2.5 v-on(Vue事件)2.6 v-show与v-if2.7 v-for2.8 虚拟dom2.9 &#xff1a;key2.10 v-pre 预编译2.11 v-cloak阻塞3.总结3.1 vm基本结构3.2 概念3.3 指…

List接口相对于Collection接口的特有方法

【添加功能】 1 void add(int index,Object element);  // 在指定位置添加一个元素。 【获取功能】 1 Object get(int index);  // 获取指定元素。 【列表迭代器】 1 ListIterator listIterator();  // 返回一个列表迭代器实现类对象&#xff0c;该迭代器…

【ml】【线性回归:最小二乘法和梯度下降法】

房屋面积和售价 线性回归&#xff1a;首先一个例子是房屋面积和价格&#xff0c;这个就构成了一个简单的线性回归 import pandas as pd import numpy as np from io import StringIO from sklearn import linear_model import matplotlib.pyplot as plt csv_data square_fee…

Vue框架入门学习(二)——Vue修饰符

文章目录三、Vue进阶用法1.事件修饰符2.computed—计算属性3.watch—监听属性※4.Vue-router5.命名路由6.JS控制路由跳转7.监视路由8.多视图三、Vue进阶用法 1.事件修饰符 指针对于v-on事件产生的修饰符&#xff0c;例如说.stop可以让操作停止 <!DOCTYPE html> <ht…

【easy】198. House Robber 123总结……

题目一&#xff1a; 一个极其简单的动态规划。 class Solution { public:int rob(vector<int>& nums) {int best0 0; // 表示没有选择当前houses int best1 0; // 表示选择了当前houses for(int i 0; i < nums.size(); i){ int temp best0; best0 ma…

Vue框架入门学习(三)——路由嵌套、组件

文章目录四、路由嵌套1.搭建2.子路由模块五、组件1.局部组件2.部署dev-server3.全局组件4.测试组件5.slot插槽6.组件的生命周期四、路由嵌套 1.搭建 首先创建工程和对应的目录&#xff0c;但是不将vue.js和vue.router.js导入进来&#xff0c;而是直接cmd到对应folder进行下载…