美文网首页
javascript高级程序设计11

javascript高级程序设计11

作者: glassUp | 来源:发表于2022-03-29 16:22 被阅读0次


    ES6中引入的class关键字具有正式定义类的能力,类背后的思想仍然是原型和构造函数的概念,其实完全可以把类看成是构造函数的另一种写法,因为类本身就指向构造函数
    需要注意的点:
    1.调用类构造函数必须使用new操作符,普通构造函数一般也用new调用,但是可以不用new调用,这时就会以windows作为内部对象
    2..类的方法都定义在prototype对象上面,所以类的新方法可以添加在prototype对象上面。Object.assign方法可以很一次向类添加多个方法。
    3.prototype对象的constructor属性,直接指向“类”的本身
    4..constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象。
    5.类不存在变量提升

    class Animal {};
    class Person{
      constructor(){
        console.log('p')
      }
    };
    class Vegatable{
      constructor(){
        this.color = 'orange'       //构造函数内部的this被赋值为这个新对象
      }
    };
    let a = new Animal();
    let p = new Person();        //p
    let v = new Vegetable();   
    console.log(v.color)         //orange    class实例化之后,内部的this其实就是指这个实例对象
    
    //在类的原型上增加方法
    Object.assign(Animal.prototype,{
      方法1,
      方法2
    })
    

    6.super() 方法引用父类。
    通过在 constructor 方法中调用 super() 方法,我们调用了父级的 constructor 方法,获得了父级的属性和方法的访问权限
    创建类继承,使用 extends 关键字。

    class Car {
      constructor(brand) {
        this.carname = brand;
      }
      present() {
        return 'I have a ' + this.carname;
      }
    }
    
    class Model extends Car {
      constructor(brand, mod) {
        super(brand);
        this.model = mod;
      }
      show() {
        return this.present() + ', it is a ' + this.model;
      }
    }
    
    let myCar = new Model("Ford", "Mustang");
    document.getElementById("demo").innerHTML = myCar.show();
    

    相关文章

      网友评论

          本文标题:javascript高级程序设计11

          本文链接:https://www.haomeiwen.com/subject/ucbvjrtx.html