从extend看JS继承

从 extend 看 JS 继承

继承是面向对象编程中非常重要的一个概念,它可以让我们更好地组织代码并实现代码复用。在 JavaScript 中,我们可以使用 extend 方法来实现继承。本文将从 extend 方法的实现原理出发,详细介绍 JS 中的继承,包括原型链、构造函数继承、组合继承等,并结合示例代码进行讲解。

extend 实现原理

在 ES5 中没有内置的 extend 方法,我们通常需要通过手动实现来实现继承。以下是一个基本的 extend 实现:

-------- ---------------- ----------- -
  --- - - ---------- ---
  ----------- - ---------------------
  ------------------ - --- ----
  ------------------------------ - ---------
-

这个实现的原理是:创建一个空函数 F,将父类的原型赋值给 F 的原型,然后将子类的原型指向 F 的实例,最后将子类的构造函数指向子类本身。这样一来,子类就继承了父类的所有属性和方法。

原型链继承

原型链继承是 JavaScript 中最基本的继承方式。其基本原理是通过让子类的原型对象指向父类的实例来实现继承。以下是一个原型链继承的示例代码:

-------- ------------ -
  --------- - -----
-

------------------------ - ---------- -
  --------------- ---- -- - - -----------
--

-------- --------- ---- -
  ----------------- ------
  -------- - ----
-

------------- - --- ---------

------------------------- - ----

-------------------- - ---------- -
  -------------- -- - - -------- - - ----- ------
--

--- --- - --- --------- ---

-------------- -- ------ ---- -- ---

------------- -- ----- -- - ----- ----

在这个示例中,我们定义了一个 Animal 类和一个 Dog 类,Dog 继承了 Animal。在 Dog 的构造函数中,我们调用了 Animal 的构造函数来初始化一些属性。然后将 Dog 的原型对象指向了 Animal 的实例,这样 Dog 就可以访问和继承 Animal 的方法和属性了。

构造函数继承

构造函数继承是通过在子类的构造函数内部调用父类的构造函数,从而实现继承。以下是一个构造函数继承的示例代码:

-------- ------------ -
  --------- - -----
-

------------------------ - ---------- -
  --------------- ---- -- - - -----------
--

-------- --------- ---- -
  ----------------- ------
  -------- - ----
-

-------------------- - ---------- -
  -------------- -- - - -------- - - ----- ------
--

--- --- - --- --------- ---

-------------- -- -------------- -- --- - --------

------------- -- ----- -- - ----- ----

在这个示例中,我们定义了一个 Animal 类和一个 Dog 类,Dog 继承了 Animal。在 Dog 的构造函数中,我们调用了 Animal 的构造函数来初始化一些属性。但是由于原型对象没有继承 Animal 的方法,所以在调用 dog.sayName() 的时候会报错。

组合继承

组合继承是将原型链继承和构造函数继承结合起来的一种方式。其基本原理是通过在子类的构造函数内部调用父类的构造函数,并将子类

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/10730