原型链继承

Posted 云淡风轻

tags:

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

  面向对象编程都会涉及到继承这个概念,JS中实现继承的方式主要是通过原型链的方法。

一、构造函数、原型与实例之间的关系

  每创建一个函数,该函数就会自动带有一个 prototype 属性。该属性是个指针,指向了一个对象,我们称之为 原型对象。指针就好比学生的学号,原型对象则是那个学生。我们通过学号找到唯一的那个学生。假设突然,指针设置 null, 学号重置空了,不要慌,对象还存在,学生也没消失。只是不好找了。

  原型对象上默认有一个属性 constructor,该属性也是一个指针,指向其相关联的构造函数。

  通过调用构造函数产生的实例,都有一个内部属性,指向了原型对象。所以实例能够访问原型对象上的所有属性和方法。

  所以三者的关系是,每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。

 

function Dog (name) {
    this.name = name;
    this.type = ‘Dog‘;  
}
Dog.prototype.speak = function () {
  alert(‘汪!‘);
}
var doggie = new Dog(‘jiwawa‘);
doggie.speak();  //汪!

 

 

 

   以上代码定义了一个构造函数 Dog(),  Dog.prototype 指向的原型对象上的自带属性construtor指向了 Dog,即  Dog.prototype.constructor = Dog. 然后在这个原型对象上定义了一个方法speak。实例doggie由于其内部指针指向了原型对象,所以可以访问到 speak方法。

  技术分享

  

  Dog.prototype 只是一个指针,指向的是原型对象,但是这个原型对象并不特别,它也只是一个普通对象。假设说,我们这时候,让 Dog.protptype 不再指向最初的原型对象,而是另一个类 (Animal)的实例,情况会怎样呢?

 

(正文明天写。)

 

 

 

 

 

  

  

以上是关于原型链继承的主要内容,如果未能解决你的问题,请参考以下文章

javascript 的继承

javascript类继承系列二(原型链)

原型,原型链,给予原型和class的继承

深入理解javascript原型和闭包——继承

理解js中是原型链? 如何实现继承?

关于对象构造函数原型原型链继承