Skip to content

Instantly share code, notes, and snippets.

@bellbind
Created February 10, 2015 05:50
Show Gist options
  • Save bellbind/104e89564eed3705b261 to your computer and use it in GitHub Desktop.
Save bellbind/104e89564eed3705b261 to your computer and use it in GitHub Desktop.
[es6][iojs] ES6 class and its structure
// ES6 class and structure
// iojs --es_staging classes.js
"use strict";
class A {
constructor () {
this.a = true;
}
isSuper() {
return true;
}
methodA() {
return true;
}
}
class B extends A {
constructor () {
super();
this.b = true;
}
isSuper() {
return !super.isSuper();
}
methodB() {
return true;
}
}
class C {}
console.log(A); // function A
console.log(A.toString()); // whole class declaration
console.log(A.prototype); // {isSuper: function, methodA: function}
console.log(new A()); // {a: true}
console.log(new A().constructor); // function A
console.log(B); // function B
console.log(B.prototype); // {isSuper: function, methodB: function}
console.log(new B()); // {a: true, b: true}
console.log(new B().constructor); // function B
console.log();
console.log(A.prototype.constructor); // function A
console.log(B.prototype.constructor); // function B
console.log(B.__proto__); // function A
console.log(B.prototype.__proto__); // A.prototype
console.log(new B().__proto__); // B.prototype
console.log(new B().__proto__.__proto__); // A.prototype
console.log(A.__proto__); // function Empty
console.log(A.__proto__.toString()); // function Empty() {}
console.log(A.__proto__ === C.__proto__); // true
console.log();
// class compatible Object implementation (except toString())
var B2 = function B2() {
B2.__proto__.call(this);
this.b = true;
};
B2.__proto__ = A;
B2.prototype.__proto__ = A.prototype;
B2.prototype.isSuper = function isSuper() {
return !B2.__proto__.prototype.isSuper.call(this);
};
B2.prototype.methodB = function methodB() {
return true;
};
console.log(B2.prototype.constructor); // function B2
console.log(B2.prototype); // {isSuper, methodB}
console.log(B2.__proto__); // function A
console.log(new B2()); // {a: true, b: true}
console.log(new B2().__proto__); // {isSuper, methodB}
console.log(new B2().__proto__.__proto__); // {isSuper, methodA}
console.log(new B2().methodA()); // true
console.log(new B2().isSuper()); // false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment