博主信息
博文 34
粉丝 0
评论 0
访问量 24945
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
0402作业-作用域与闭包、类与类的继承
千山暮雪
原创
530人浏览过

1. 作用域与闭包

作用域

变量可以起作用的范围和区域
JavaScript分全局作用域、函数作用域、块作用域。

  • 全局作用域

    默认,在任何地方都可以访问

    1. let name = '张三';
    2. console.log(name);
  • 函数作用域

    只可以在函数内部访问
    函数作用域

    1. function user() {
    2. let name = '李四';
    3. return name;
    4. }
    5. // 从全局无法获得
    6. console.log(name);
    7. // 需要使用函数调用
    8. console.log(user());
  • 块作用域

    在块内被访问被{}包裹的就是块。如if(){} while{}等
    var不支持块作用域,需要用let
    块作用域

    1. if (true) {
    2. let name = '张三';
    3. console.log(name);
    4. }
    5. // 外部无法访问到块内
    6. console.log(name);
  • 作用域链

    作用域可以根据代码层次分层,以便子作用域可以访问父作用域,通常是沿着链式的方式查找,先查找当前的作用域,当前没有,就向上找到父级的作用域,如果在父级的作用域中也找不到,就继续向上查找,直到window的作用域。如果在window中也找不到,就报错了
    作用域链

    1. let a = 10;
    2. function first() {
    3. let b = 20;
    4. function second() {
    5. let c = 30;
    6. function three() {
    7. let d = 40;
    8. console.log('a:%d,b:%d,c:%d,d:%d', a, b, c, d);
    9. }
    10. three();
    11. }
    12. second();
    13. }
    14. first();

闭包

一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。
闭包

  1. function user() {
  2. let name = '张三';
  3. function getName() {
  4. return name;
  5. }
  6. return getName;
  7. }
  8. let u = user();
  9. console.log(u());

2. 类与类的继承

类是用于创建对象的模板。

  • 类的定义

    使用带有class关键字声明,类名首字母大写
    类声明不会提升。你首先需要声明你的类,然后再使用它

    1. class User {
    2. constructor(name,email) {
    3. this.name = name;
    4. this.email = email;
    5. }
    6. }

    类表达式是定义类的另一种方法

    1. let User = class {
    2. constructor(name, email) {
    3. this.name = name;
    4. this.email = email;
    5. }
    6. }
  • 类体和方法定义

    一个类的类体是一对花括号/大括号 {} 中的部分。这是你定义类成员的位置,如构造函数,静态方法,原型方法,getter和setter等。
    类体

    1. class User {
    2. // 构造方法:constructor
    3. constructor(name,email) {
    4. this.name = name;
    5. this.email = email;
    6. }
    7. // 静态属性:static
    8. static country = 'CN';
    9. // 私有属性,不能被子类继承:#
    10. #age = 25;
    11. // 原型方法
    12. show() {
    13. return {name:this.name,email:this.email};
    14. }
    15. // 静态方法,不需要(new)实例化,直接用类名调用:static
    16. static getCountry() {
    17. // 静态成员中的this表示的是当前类
    18. return this.country;
    19. }
    20. }
    21. // 类的实例化
    22. let user = new User('张三','tp@qq.com');
    23. console.dir(user);
    24. console.dir(User);

    类的静态属性与方法

    1. // 获取类的静态属性
    2. console.log(User.country);
    3. // 调用类的静态方法
    4. console.log(User.getCountry());
  • 类的继承

    使用extends 关键字在 类声明 或 类表达式 中用于创建一个类作为另一个类的一个子类
    声明子类

    1. class User {
    2. }
    3. class Phper extends User {
    4. }
    5. console.dir(Phper);

    如果子类中定义了构造函数,那么它必须先调用 super() 才能使用 this
    super

    1. // 父类
    2. class User {
    3. constructor(name, email) {
    4. this.name = name;
    5. this.email = email;
    6. }
    7. show() {
    8. return {name:this.name,email:this.email};
    9. }
    10. }
    11. // 子类
    12. class Phper extends User {
    13. constructor(name,email,gender) {
    14. super(name,email);
    15. this.gender = gender;
    16. }
    17. // 重写父类的方法
    18. show() {
    19. return {name:this.name,email:this.email,gender:this.gender};
    20. }
    21. }
    22. let u = new Phper('张三','tp@php.cn','男');
    23. console.dir(u);
    24. console.log(u.show());
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学