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

对象继承

时间:2015-10-29 14:56:56      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

JS的对象继承

这是一个单继承

//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."

这是一个多继承

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. 继承分两个方面,实例部分跟原型部分

  2. 实例部分用call改写this指针加载

  3. 原型部分用Object.create将原形链复制过去

  4. 当然,可以用别的方法继承,譬如:new SuperClass() 然后再添加实例、原型等方法

  5. 普及一下Object.create

=======

概述

Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象。

语法

Object.create(proto, [ propertiesObject ])

参数

  • proto

  • 一个对象,作为新创建对象的原型。

  • propertiesObject

  • 可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与Object.defineProperties()的第二个参数一样)。注意:该参数对象不能是 undefined,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。

抛出异常

如果 proto 参数不是 null 或一个对象值,则抛出一个 TypeError 异常。

=======


对象继承

标签:

原文地址:http://my.oschina.net/u/1402334/blog/523496

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