javascript---繼承

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript---繼承相关的知识,希望对你有一定的参考价值。

ECMASCript关于继承:实现继承----继承了实际方法, 其实现最主要是利用原型链

1. 原型链继承

 原型链实现继承的主要方法,基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。

 1 function superType() {
 2     this.protype = true;
 3 }
 4 
 5 superType.prototype.getSuperValue = function() {
 6     return this.protype;
 7 }
 8 
 9 function subType() {
10     this.subProperty = false;
11 }
12 
13 subType.prototype = new superType();//继承是superType的实例
14 
15 subType.prototype.getSubValue = function() {
16     return this.subProperty;
17 }
18 
19 var instance = new subType();
20 
21 console.log(instance.getSuperValue());//true

  注意以下几点:

  (1)所有自定的对象默认的原型是Object的实例,所有的函数都有一个[[prototype]]指针指向object的原型。

  (2)确定原型和实例之间关系方法: instanceof和isPrototypeOf()

       (3)给原型添加的方法一定在替换原型之后

    (4)  使用对象字面量方法很容易切断原型和继承原型之间的联系

     原型继承问题: 

         a. 原型中包含引用类型值,将继承原型中存在

         b. 不能向超类的构造函数中传递参数

2. 借用构造函数(伪造函数和经典继承)

 目的:解决原型继承的包含引用类型问题

 1 function superType() {
 2     this.colors = [‘a", ‘b‘];    
 3 }
 4 
 5 function subType() {
  //继承SupeType
6 superType.call(this); //这样定义之后,subType的实例都一份color的实例 7 } 8 9 var instance = new subType(); 10 11 instance.colors.push("c"); 12 console.log(instance.colors);// ‘a‘, ‘b‘, ‘c‘ 13 14 var instance1 = new subType(); 15 console.log(instance1.colors); ‘a‘, ‘b‘

 利用借用构造继承最大的优势是子类可以给超类传递参数, 最大缺点是方法无法继承

3. 组合继承---原型链和借用构造函数继承组合

  组合继承是javascript中最常用的继承方式

 1 function superType(name) {pe
 2     this.name = name;
 3     this.color = [‘green, ‘yellow‘‘;]   
 4 }
 5 
 6 superType.prototype.sayName = function() {
 7  alert(this.name);   
 8 }
 9 
10 fucntion subType(name, age){
11     superType.call(this, name);//借用构造函数
12     this.age = age;
13 }
14 
15 subType.prototype = new superType();
16 subType.prototype.constructor = subType;
17 subType.prototype.sayAge = function() {
18     alert(this.age);    
19 };
20 
21 var instance = new subType(‘frank‘, 29);
22 instance.sayName();//‘frank‘
23 instance.color.push[‘red‘]; //‘red‘, ‘green‘, ‘yellow‘
24 alert(instance.color); 
25
26 var instance1 = new subType(‘jack‘, 24);
27 instance1.sayAge(); //24
28 alert(instance1.color);//‘green‘, ‘yellow‘

 4. 原型式继承

  原理如下函数:

1 function object(o) {
2      function F() {};
3      F.prototype = o;
4      return new F();   
5 }

  ECMAScript通过新增Object.create()函数实现了上述的方法,该函数接受两个函数,一个是作为新对象原型的对象和一个可选为新对象添加的新的属性。

       原型式继承用途是在没有必要定义一个构造函数的情况下,只是为了一个对象继承另一个对象的属性和方法。但是该方法对象中包含引用类型时,所有对象实例都会共享。

5. 寄生式继承

6. 寄生组合式继承

  

以上是关于javascript---繼承的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

30秒就能看懂的JavaScript 代码片段

常用Javascript代码片段集锦

48个值得掌握的JavaScript代码片段(上)

如何将此 JavaScript 代码片段翻译成 Parenscript?