搜索
您的当前位置:首页正文

继承与闭包

来源:知库网

继承

  • 继承是指一个对象直接使用另一对象的属性和方法。
  • 继承的方式一
//继承   父类的对象 赋值给 子类的原型  实现继承
    Son.prototype = new Father();
  • 继承方式二
    对象冒充: call,apply方式

作用域

  • 作用域
    ECMAScript 6 之前的JavaScript没有 语句块 作用域;相反,语句块中声明的变量将成为语句块所在代码段的局部变量。例如,如下的代码将在控制台输出 5,因为 x 的作用域是声明了 x 的那个函数(或全局范围),而不是 if 语句块。

  • 全局变量,局部变量
    在所有函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问。在函数内部声明的变量,叫做局部变量,因为它只能在该函数内部访问。

  • 作用域链
    当前代码在环境中执行时,会形成一个作用域链,用来保证执行环境中 访问权限,在作用链中:首先会在当前的作用中寻找,如果找到就使用,若没有找到,到对应的上层去找,以此类推

声明提升

变量(函数)提升:程序运行之前, 会检测所有的代码,如果遇到关键词 var(function) ,表明对应变量是存在,在内存分配一定的区域

  console.log(num);   //错误,没有变量提升
  //变量
  console.log(c);

  var c;
  c = 10;
  console.log(c);

闭包

  • 闭包的概念 :
    闭包是指这样的作用域,它包含有一个函数,这个函数可以调用被这个作用域所封闭的变量、函数或者闭包等内容。通常我们通过闭包所对应的函数来获得对闭包的访问。
     //闭包函数可以把局部变量驻留在内存中
    function fun5() {
      var a = 100;
      return function() {
        return ++a;
      }
    }
    var result = fun5();
    console.log(result());   //101
    console.log(result());   //102
    console.log(result());   //103
    
  • 闭包可以防止大量的全局污染,但是如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。

ES6语法中的类与继承

  • class 关键字 : 定义类
  • constructor 关键字 : 构造函数
  • static 关键字用来定义一个类的一个静态方法
  • extends 关键字 : 实现继承
  • super 调用超类
//–––––––––––––––使用 extends继承––––––––––––
    class Son extends Father {
      speak() {
        super.speak();
        alert(this.name + '儿子说');
      }
    }
    let s = new Son('xiaoming',22);
    s.speak();
Top