JavaScript 如何实现继承?.docxVIP

  • 1
  • 0
  • 约3.75千字
  • 约 6页
  • 2017-07-09 发布于河南
  • 举报
JavaScript 如何实现继承?

/ JavaScript 如何实现继承? 前言:大多OO语言都支持两种继承方式: 接口继承和实现继承 ,而ECMAScript中无法实现接口继承,ECMAScript只支持实现继承,而且其实现继承主要是依靠 原型链 来实现。 1.原型链 基本思想:利用原型让一个引用类型继承另外一个引用类型的属性和方法。 构造函数,原型,实例之间的关系:每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。 原型链实现继承例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function SuperType() { perty = true; } SuperTtotype.getSuperValue = function() { return perty; } function subType() { perty = false; } //继承了SuperType SubTtotype = new SuperType(); SubTtotype.getSubValue = function (){ return perty; } var instance = new SubType(); console.log(instance.getSuperValue());//true 2.借用构造函数 基本思想:在子类型构造函数的内部调用超类构造函数,通过使用call()和apply()方法可以在新创建的对象上执行构造函数。 例子: 1 2 3 4 5 6 7 8 9 10 11 function SuperType() { this.colors = [red,blue,green]; } function SubType() { SuperType.call(this);//继承了SuperType } var instance1 = new SubType(); instance1.colors.push(black); console.log(instance1.colors);//red,blue,green,black var instance2 = new SubType(); console.log(instance2.colors);//red,blue,green 3.组合继承 基本思想:将原型链和借用构造函数的技术组合在一块,从而发挥两者之长的一种继承模式。 例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 function SuperType(name) { = name; this.colors = [red,blue,green]; } SuperTtotype.sayName = function() { console.log(); } function SubType(name, age) { SuperType.call(this,name);//继承属性 this.age = age; } //继承方法 SubTtotype = new SuperType(); Stotype.constructor = Subtype; Stotype.sayAge = function() { console.log(this.age); } var instance1 = new SubType(EvanChen,18); instance1.colors.push(black); consol.log(instance1.colors);//red,blue,green,black instance1.sayName();//EvanChen instance1.sayAge();//18 var instance2 = new SubType(EvanChen666,20); console.log(instance2.colors);//red,blue,green instance2.sayName();//EvanChen666 instance2.sayAge();//20 4.原型式继承 基本想法:借助原型可以基于已有的对象创建新对象,同时还不必须因此创建自定义的类型。 原型式继承的思想可用以下函数来说明: 1 2 3 4 5 function object(o) { function F(){} F.prototype = o; return new F(); } 例子: 1 2 3 4 5 6 7 8 9 10 11 var person = { name:EvanChen, friends:[Shelby,Court,

文档评论(0)

1亿VIP精品文档

相关文档