标签:
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 };
有了上面两个例子,我们总结一下
继承分两个方面,实例部分跟原型部分
实例部分用call改写this指针加载
原型部分用Object.create将原形链复制过去
当然,可以用别的方法继承,譬如:new SuperClass() 然后再添加实例、原型等方法
普及一下Object.create
Object.create()
方法创建一个拥有指定原型和若干个指定属性的对象。
Object.create(proto, [ propertiesObject ])
proto
一个对象,作为新创建对象的原型。
propertiesObject
可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与Object.defineProperties()
的第二个参数一样)。注意:该参数对象不能是 undefined
,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。
如果 proto 参数不是 null
或一个对象值,则抛出一个 TypeError
异常。
标签:
原文地址:http://my.oschina.net/u/1402334/blog/523496