码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-11-20 19:17:31      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:static   对象   java   创建   lob   statement   oba   表达   语法   

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 关键字

标签:static   对象   java   创建   lob   statement   oba   表达   语法   

原文地址:http://www.cnblogs.com/laneyfu/p/6082782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!