美文网首页Web前端之路让前端飞
JavaScript中的复用和抽象

JavaScript中的复用和抽象

作者: ZoranLee | 来源:发表于2020-05-13 12:19 被阅读0次

复用、抽象

image.png

JavaScript实现方式

  • 模拟Java中的类
    有new、this,但是缺少继承等关键特性,ES6开始提供class关键字
  • 原型 (prototype)

ES6之后

  • Object.create(根据指定的原型创建新对象)
  • Object.getPrototypeOf (获得一个对象的原型)
  • Object.setPrototypeOf (设置一个对象的原型)

原型复用示例

//创建“猫”对象
var cat = {
    say(){
        console.log("meow~");
    },
    jump(){
        console.log("jump");
    }
}
//根据猫,修改创建了虎
var tiger = Object.create(cat,  {
    say:{
        writable:true,
        configurable:true,
        enumerable:true,
        value:function(){
            console.log("roar!");
        }
    }
})


var anotherCat = Object.create(cat);

anotherCat.say();

var anotherTiger = Object.create(tiger);

anotherTiger.say();

类与原型

image.png

之前版本new+function 来模拟对象

  • 以构造器的 prototype 属性(注意与私有字段[[prototype]]的区分)为原型,创建新对象;
  • 将 this 和调用参数传给构造器,执行;
  • 如果构造器返回的是对象,则返回,否则返回第一步创建的对象。

模拟类创建对象

function c1(){
//直接在构造器中修改this,给this添加属性
    this.p1 = 1;
    this.p2 = function(){
        console.log(this.p1);
    }
} 
var o1 = new c1;
o1.p2();

function c2(){
}
//修改构造器的prototype属性指向的对象
c2.prototype.p1 = 1;
c2.prototype.p2 = function(){
    console.log(this.p1);
}

var o2 = new c2;
o2.p2();

ES6 中的类

  • 关键字class
class Rectangle {
constructor(height, width){
this.height = height;
    this.width = width;
}
 // Getter
  get area() {
    return this.calcArea();
  }
// Method
  calcArea() {
    return this.height * this.width;
  }
}
  • 继承 extends
class Animal { 
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    console.log(this.name + ' makes a noise.');
  }
}

class Dog extends Animal {
  constructor(name) {
    super(name); // call the super class constructor and pass in the name parameter
  }

  speak() {
    console.log(this.name + ' barks.');
  }
}

let d = new Dog('Mitzie');
d.speak(); // Mitzie barks.

使用类的思想来设计代码时,应该尽量使用class来声明类

相关文章

  • JavaScript中的复用和抽象

    复用、抽象 JavaScript实现方式 模拟Java中的类有new、this,但是缺少继承等关键特性,ES6开始...

  • TypeScript返回值类型和参数类型如何定义

    在 JavaScript 中,函数是构建应用的一块基石,我们可以使用函数抽离可复用的逻辑、抽象模型、封装过程。在 ...

  • Java面试必问:抽象类和接口的区别

    抽象类和接口的区别: 抽象类可以实现代码的复用;抽象类不可以创建实例对象; 有抽象方法的类一定是抽象类,抽象类中的...

  • JavaScript对象

    概念 JavaScript 中的对象:JavaScript 中的对象其实就是生活中对象的一个抽象。JavaScri...

  • js.pattern -h 模板方法模式

    基于复用技术、抽象类-->继承抽象类 创建抽象类 实现抽象类

  • 抽象类和接口有什么区别?

    (1) 在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接...

  • 接口和抽象类该如何取舍

    抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。 “面向接口编程”中...

  • ES6 之 Promise

    Promise是JavaScript异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步...

  • JavaScrip对象

    概述 JavaScript中的对象就是生活中单个实物的抽象,对象是一个容器,封装了属性(property)和方法(...

  • 初级10 - 接口与抽象类(上)

    Java 接口和抽象类的设计是为了 : 最大程度的灵活性 最大程度的复用 1. 抽象类 抽象类是使用abstrac...

网友评论

    本文标题:JavaScript中的复用和抽象

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