對象繼承

JS的對象繼承this

這是一個單繼承spa

//Shape - superclass
function Shape() {
  this.x = 0;
  this.y = 0;
}
Shape.prototype.move = function(x, y) {
    this.x += x;
    this.y += y;
    console.info("Shape moved.");
};

// Rectangle - subclass
function Rectangle() {
  Shape.call(this); //call super constructor.
}
Rectangle.prototype = Object.create(Shape.prototype);
var rect = new Rectangle();
rect instanceof Rectangle //true.
rect instanceof Shape //true.
rect.move(1, 1); //Outputs, "Shape moved."

這是一個多繼承prototype

function MyClass() {
     SuperClass.call(this);
     OtherSuperClass.call(this);
}

MyClass.prototype = Object.create(SuperClass.prototype); //inherit

mixin(MyClass.prototype, OtherSuperClass.prototype); //mixin

MyClass.prototype.myMethod = function() {
     // do a thing
};



有了上面兩個例子,咱們總結一下指針

  1. 繼承分兩個方面,實例部分跟原型部分code

  2. 實例部分用call改寫this指針加載orm

  3. 原型部分用Object.create將原形鏈複製過去對象

  4. 固然,能夠用別的方法繼承,譬如:new SuperClass() 而後再添加實例、原型等方法繼承

  5. 普及一下Object.createip

=======

概述

Object.create() 方法建立一個擁有指定原型和若干個指定屬性的對象。ci

語法

Object.create(proto, [ propertiesObject ])

參數

  • proto

  • 一個對象,做爲新建立對象的原型。

  • propertiesObject

  • 可選。該參數對象是一組屬性與值,該對象的屬性名稱將是新建立的對象的屬性名稱,值是屬性描述符(這些屬性描述符的結構與Object.defineProperties()的第二個參數同樣)。注意:該參數對象不能是 undefined,另外只有該對象中自身擁有的可枚舉的屬性纔有效,也就是說該對象的原型鏈上屬性是無效的。

拋出異常

若是 proto 參數不是 null 或一個對象值,則拋出一個 TypeError 異常。

=======

相關文章
相關標籤/搜索