Javascript面向对象之四 继承

yizhihongxing

Javascript面向对象之四 继承

在 Javascript 中,对象是通过原型 (prototype) 进行继承的。

原型链继承

原型链继承是最常见的继承方式。它的原理是通过把一个对象作为另一个对象的原型来实现继承。

示例1:

function Animal(name) {
  this.name = name;
}

Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
}

function Dog(name, color) {
  this.color = color;
}

// 继承 Animal
Dog.prototype = new Animal();

var dog1 = new Dog('Toby', 'brown');
dog1.sayName(); // My name is Toby

在上面的代码中,我们创建了一个 Animal 构造函数和一个 Dog 构造函数。我们想让 Dog 继承自 Animal,所以通过原型链把 Animal.prototype 赋值为 Dog.prototype 的原型。

借用构造函数继承

借用构造函数继承是通过在子类构造函数中调用父类构造函数来实现继承。

示例2:

function Animal(name) {
  this.name = name;
}

Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
}

function Dog(name, color) {
  Animal.call(this, name);
  this.color = color;
}

var dog1 = new Dog('Toby', 'brown');
dog1.sayName(); // 报错: dog1.sayName is not a function

在上面的代码中,我们使用了 Animal.call(this, name) 这种方式来实现继承。这行代码的作用是在 Dog 构造函数中调用 Animal 构造函数,并传入 Dog 构造函数的 thisname 参数。这样我们就能够通过 Dog 构造函数来创建 Dog 的实例对象 dog1

但是这种继承方式不会继承 Animal.prototype 上的方法,所以 dog1.sayName() 会报错。如果我们想让 Dog 继承 Animal 的方法,我们需要在 Dog 构造函数中调用 Animal.call(this, name) 之后再把 Animal.prototype 中的方法复制到 Dog.prototype 中去。

示例3:

function Animal(name) {
  this.name = name;
}

Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
}

function Dog(name, color) {
  Animal.call(this, name);
  this.color = color;
}

// 继承 Animal 原型链上的方法
Dog.prototype = Object.create(Animal.prototype);

// 把 Dog.prototype 上的 constructor 设置为 Dog
Dog.prototype.constructor = Dog;

var dog1 = new Dog('Toby', 'brown');
dog1.sayName(); // My name is Toby

在上面的代码中,我们把 Dog.prototype 赋值为 Object.create(Animal.prototype),这样 Dog.prototype 上就继承了 Animal.prototype 上的方法了。我们还需要把 Dog.prototype 上的 constructor 属性设置为 Dog

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript面向对象之四 继承 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • ECMAScript 数据类型之Number类型

    ECMAScript是一种面向对象的编程语言,是Javascript的标准,常用于Web前端开发。ECMAScript定义了很多数据类型,其中之一就是Number类型。 Number类型概述 Number类型是ECMAScript中最常用的数据类型之一,用于表示数字。Number类型可以是整数或浮点数。在ECMAScript中,没有特别的类型用于表示整型或浮…

    JavaScript 2023年5月28日
    00
  • javascript中使用未定义变量或值的情况分析

    当你在JavaScript中使用未定义变量或值时,会遇到“undefined”或“ReferenceError”的错误。 未定义变量的情况: 当你使用一个未定义的变量时,JavaScript会返回“undefined”,而不是抛出异常错误。因此,你必须小心使用未定义的变量,以避免不必要的错误。 示例1:未定义变量的情况 var a; console.log(…

    JavaScript 2023年5月18日
    00
  • Python实现的飞速中文网小说下载脚本

    下面我将详细讲解“Python实现的飞速中文网小说下载脚本”的完整攻略。 1. 需求背景 飞速中文网是一个提供在线阅读小说的网站,但有时我们并不能在网站上稳定地阅读,此时我们可以使用 Python 实现的小说下载脚本,以便获取更加稳定的阅读体验。 2. 实现步骤 Step 1. 安装 Python 为了运行小说下载脚本,我们需要先安装 Python。我们可以…

    JavaScript 2023年5月28日
    00
  • js 在定义的时候立即执行的函数表达式(function)写法

    “js 在定义的时候立即执行的函数表达式(function)写法”也称为IIFE(Immediately Invoked Function Expression)。 IIFE 是一种 JavaScript 函数,它们在定义时会立即执行自己,且不会在全局可见,即不会污染全局作用域。IIFE 最常用的场景是将代码封装在一个作用域中,以防止变量名冲突和代码污染。下…

    JavaScript 2023年5月27日
    00
  • 基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)

    下面我来详细讲解一下基于JavaScript实现根据手机定位获取当前具体位置的完整攻略。 准备工作 获取用户地理位置授权。在JavaScript中,我们可以通过navigator.geolocation.getCurrentPosition()方法获取用户的当前位置信息。但是在获取位置信息之前,需要向用户请求获取他们的位置授权。用于请求授权的代码如下: “…

    JavaScript 2023年6月11日
    00
  • elementUI动态嵌套el-form表单校验举例详解

    ElementUI 动态嵌套 el-form 表单校验举例详解 简介 在 ElementUI 中,el-form 是常用的表单组件,用于进行数据录入和数据校验。但是,当表单复杂度较高,需要动态增加或删除表单项时,我们需要使用动态嵌套来实现。本篇文章将详细讲解 ElementUI 动态嵌套 el-form 表单校验的实现方法,包括基础使用方法、动态增加表单项、…

    JavaScript 2023年6月10日
    00
  • JS简单判断函数是否存在的方法

    当我们在编写JavaScript代码时,经常需要判断一个函数是否存在,以避免意外的“未定义”错误。以下是几种判断JavaScript函数是否存在的方法: 1. typeof typeof 运算符可以返回一个值的数据类型。如果一个变量的数据类型是函数,它的返回值将是 “function”。因此,我们可以使用 typeof 来判断一个函数是否存在: if (ty…

    JavaScript 2023年5月27日
    00
  • JavaScript实现限时秒杀功能

    下面是“JavaScript实现限时秒杀功能”的完整攻略: 1. 确定秒杀的商品 首先要确定秒杀的商品,包括商品信息、活动时间、秒杀价格等。这些信息都需要在页面上展示出来,以便用户可以清晰地了解秒杀活动的具体内容。 2. 设计用户界面 为了让用户更好地体验秒杀活动,我们需要设计一个简洁明了的UI界面。界面要包括秒杀商品的图片、名称、原价、秒杀价、秒杀倒计时等…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部