讲烂了的 JavaScript 原型继承

创建普通对象

对象字面量

var object = {
  public_property: 1,
  public_method: function () {
    return this.public_property;
  }
};

内置构造函数

var object = new Object();
object.public_property = 1;
object.public_method = function () {
  return this.public_property;
};

创建对象实例

工厂模式(闭包)

function factory() {
  var private_property = 1;

  function private_method() {
    return private_property;
  }

  return {
    public_property: 1,
    public_method: function () {
      return [this.public_property, private_method()];
    }
  };
}

var object = factory();

构造函数

function Class() {
  this.public_property = 1;
}

Class.prototype.public_method = function () {
  return this.public_property;
};

var object = new Class();
Object.create = function (prototype) {
  function Temp() {}
  Temp.prototype = prototype;

  return new Temp();
};

var object = Object.create(Class.prototype);

子类继承父类

父类修饰子类

function Parent() {
  this.public_property = 1;
}

Parent.prototype.public_method = function () {
  return this.public_property;
};

function Child() {
  Parent.call(this);

  this.public_property = 1;
}

Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

Child.prototype.public_method = function () {
  return Parent.prototype.public_method.call(this) * 2;
};

var parent = new Parent(),
  child = new Child();
var outer = {};
var inner = Function.call(outer, 'return 1;');

inner(); // 1
outer(); // Uncaught TypeError: outer is not a function

子类修饰父类

function Child() {
  var that = Object.setPrototypeOf(
    new (Parent.bind.apply(null, arguments))(),
    Child.prototype
  );

  that.public_property = 1;

  return that;
}
function Child() {
  var that = Object.setPrototypeOf(new Parent(...arguments), Child.prototype);

  that.public_property = 1;

  return that;
}

上一篇
为何新手可用 TypeScript? 为何新手可用 TypeScript?
TypeScript 官网开宗明义 —— TypeScript 是适用于任何规模应用的 JavaScript 其中奥妙,且看我一个边干边学的 JS 码农娓娓道来~ 安装简单因为 TypeScript 官方支持 ECMAScript 最新
2020-08-11
下一篇
Web 前端“像素级还原”的真相 Web 前端“像素级还原”的真相
freeCodeCamp 中文社区 首次直播分享会 互联网公司“金句” 这个很简单,技术我不懂,明天我就要! —— 产品经理 前端应该“像素级还原”设计图! —— UI 设计师 Web 前端开发的真相 几乎不用“像素”这个
2020-05-22