搜索
首页web前端js教程基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解_javascript技巧

构造函数、原型实现继承的缺陷

首先来分析构造函数和原型链两种实现继承方式的缺陷:

构造函数(对象冒充)的主要问题是必须使用构造函数方式,且无法继承通过原型定义的方法,这不是最好的选择。不过如果使用原型链,就无法使用带参数的构造函数了。开发者如何选择呢?答案很简单,两者都用。

构造函数+原型混合方式

这种继承方式使用构造函数定义类,并非使用任何原型。创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。用这两种方式重写前面的例子,代码如下:

复制代码 代码如下:

function ClassA(sColor) {
    this.color = sColor;
}

ClassA.prototype.sayColor = function () {
    alert(this.color);
};

function ClassB(sColor, sName) {
    ClassA.call(this, sColor);
    this.name = sName;
}

ClassB.prototype = new ClassA();

ClassB.prototype.sayName = function () {
    alert(this.name);
};


在此例子中,继承机制由两行突出显示的蓝色代码实现。在第一行突出显示的代码中,在 ClassB 构造函数中,用对象冒充继承 ClassA 类的 sColor 属性。在第二行突出显示的代码中,用原型链继承 ClassA 类的方法。由于这种混合方式使用了原型链,所以 instanceof 运算符仍能正确运行。

下面的例子测试了这段代码:
复制代码 代码如下:

var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor();    //输出 "blue"
objB.sayColor();    //输出 "red"
objB.sayName();    //输出 "John"

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python中的构造函数Python中的构造函数Sep 02, 2023 pm 04:29 PM

在Python中,每个类都有一个构造函数,它是类内部指定的特殊方法。构造函数/初始化程序将在为类创建新对象时自动调用。当对象被初始化时,构造函数将值分配给类中的数据成员。没有必要显式定义构造函数。但为了创建构造函数,我们需要遵循以下规则-对于一个类,它只允许有一个构造函数。构造函数名称必须是__init__。必须使用实例属性定义构造函数(只需将self关键字指定为第一个参数)。它不能返回除None之外的任何值。语法classA():def__init__(self):pass示例考虑下面的示例并

C++语法错误:定义在类外的构造函数必须加上类名作为限定符,应该怎么改正?C++语法错误:定义在类外的构造函数必须加上类名作为限定符,应该怎么改正?Aug 22, 2023 pm 02:00 PM

C++是一种广泛使用的面向对象编程语言,C++中定义类的构造函数时,如果希望将构造函数的定义放在类外部,那么就需要在构造函数的定义中加上类名作为限定符,以指定这个构造函数是属于哪个类的。这是C++语法的一条基本规定。如果在定义类的构造函数时没有遵守这个规定,就会出现编译错误,提示“定义在类外的构造函数必须加上类名作为限定符”。那么,如果碰到这种编译错误,应该

go语言有构造函数吗go语言有构造函数吗Jan 10, 2023 pm 02:15 PM

go语言没有构造函数。go语言作为结构化的语言是没有面向对象语言中的构造方法的,不过可以通过一些方式实现类似的面向对象语言中构造方法的效果,也就是使用结构体初始化的过程来模拟实现构造函数。

什么是构造函数?详解JavaScript中的构造函数什么是构造函数?详解JavaScript中的构造函数Aug 04, 2022 pm 03:22 PM

作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下JavaScript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!

C++报错:构造函数必须在public区域声明,怎么处理?C++报错:构造函数必须在public区域声明,怎么处理?Aug 21, 2023 pm 08:26 PM

在C++编程中,构造函数是用来初始化类的成员变量的重要函数。它在创建对象时自动调用,以确保对象的正确初始化。构造函数必须在类中声明,但是有时会遇到错误提示“构造函数必须在public区域声明”。这个错误通常是因为构造函数的访问权限修饰符错误引起的。在C++中,类的成员变量和成员函数都有一个访问权限修饰符,包括public、private和protected。

C++语法错误:相同的构造函数签名出现多次,应该怎么解决?C++语法错误:相同的构造函数签名出现多次,应该怎么解决?Aug 22, 2023 pm 04:49 PM

C++是一门强大的编程语言,但是在使用过程中,难免会遇到各种问题。其中,相同的构造函数签名出现多次就是一种常见的语法错误。本文将介绍这种错误的原因和解决方法。一、错误原因在C++中,构造函数用于创建对象时初始化对象的数据成员。但是,如果在同一个类中定义了相同的构造函数签名(即参数类型和顺序相同),编译器就无法确定要调用哪一个构造函数,从而引起编译错误。例如,

聊聊JavaScript中怎么利用Object()函数创建对象聊聊JavaScript中怎么利用Object()函数创建对象Aug 04, 2022 pm 04:32 PM

怎么利用Object()函数创建对象?下面本篇文章给大家介绍一下Object()构造函数创建对象的方法(附其他三种创建对象的方法),希望对大家有所帮助!

C++语法错误:只有单一参数的构造函数必须声明为explicit,要怎样解决?C++语法错误:只有单一参数的构造函数必须声明为explicit,要怎样解决?Aug 22, 2023 am 09:01 AM

在C++编程中,可能会遇到如下错误提示:只有单一参数的构造函数必须声明为explicit。这个错误提示可能让初学者感到疑惑,接下来,我们来了解一下在C++中什么是explicit,以及该错误提示出现的原因以及如何解决这一问题。explicit的作用在C++中,如果我们定义了一个只接收一个参数的构造函数,那么我们需要使用关键字explici

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能