使用 Object.create 创建对象,super 关键字,class 关键字

Posted 飞翔梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Object.create 创建对象,super 关键字,class 关键字相关的知识,希望对你有一定的参考价值。

ECMAScript 5 中引入了一个新方法:Object.create()。可以调用这个方法来创建一个新对象。新对象的原型就是调用 create 方法时传入的第一个参数:

var a = {a: 1}; 
// a ---> Object.prototype ---> null

var b = Object.create(a);
// b ---> a ---> Object.prototype ---> null
console.log(b.a); // 1 (继承而来)

var c = Object.create(b);
// c ---> b ---> a ---> Object.prototype ---> null

var d = Object.create(null);
// d ---> null
console.log(d.hasOwnProperty); // undefined, 因为d没有继承Object.prototype

使用 class 关键字

ECMAScript6 引入了一套新的关键字用来实现 class。使用基于类语言的开发人员会对这些结构感到熟悉,但它们是不一样的。 javascript 仍然是基于原型的。这些新的关键字包括 classconstructorstaticextends, 和 super.

 

"use strict";
class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

class Square extends Polygon {
  constructor(sideLength) {
    super(sideLength, sideLength);
  }
  get area() {
    return this.height * this.width;
  }
  set sideLength(newLength) {
    this.height = newLength;
    this.width = newLength;
  }
}

var square = new Square(2);

super 关键字用于访问父对象上的函数。

class Polygon {
  constructor(height, width) {
    this.name = ‘Polygon‘;
    this.height = height;
    this.width = width;
  }
  sayName() {
    console.log(‘Hi, I am a ‘, this.name + ‘.‘);
  }
}

class Square extends Polygon {
  constructor(length) {
    this.height; // 这里会报错, 必须要先调用 super!
    
    // 这里我们调用父类的构造方法并传入 length
    // 作为 Polygon‘s 的 width 和 height
    super(length, length);
    
    // Note: 在派生的类中, super() 必须在 ‘this‘ 之前调用
    // 如果漏掉,则会造成引用错误。
    this.name = ‘Square‘;
  }

  get area() {
    return this.height * this.width;
  }

  set area(value) {
    this.area = value;
  } 
}

  

调用父类上的静态方法

你也可以用 super 调用父类的 静态方法

class Human {
  constructor() {}
  static ping() {
    return ‘ping‘;
  }
}

class Computer extends Human {
  constructor() {}
  static pingpong() {
    return super.ping() + ‘ pong‘;
  }
}
Computer.pingpong(); // ‘ping pong‘

在对象字面量中使用 super.prop

var obj1 = {
  method1() {
    console.log("method 1");
  }
}

var obj2 = {
  method2() {
   super.method1();
  }
}

Object.setPrototypeOf(obj2, obj1);
obj2.method2(); // logs "method 1"

  

 

 

 

以上是关于使用 Object.create 创建对象,super 关键字,class 关键字的主要内容,如果未能解决你的问题,请参考以下文章

使用 Object.create 创建对象,super 关键字,class 关键字

Object.create(null)和{}创建对象的区别

使用“Object.create()”而不是“new”关键字来理解原型对象的创建

object.create()

js Object.create 初探

Object.create(null)