首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不理解Javascript继承

不理解Javascript继承
EN

Stack Overflow用户
提问于 2016-08-14 07:13:20
回答 2查看 72关注 0票数 1

我正在学习javascript继承。我在这里找到了一个很好的解释:JavaScript Inheritance

代码语言:javascript
运行
AI代码解释
复制
function A() {
    B.call(this);
}

function B() {
    C.call(this);
    this.bbb = function() {
        console.log("i was inherited from b!");
    }
}

我正在尝试实现基于上述和其他解决方案的继承(网上有很多这样的解决方案,它们似乎都有不同的建议)。无论如何,我正在尝试让SportsCar继承Car并使用Car的describeSelf方法。我不确定我做错了什么。PLUNK for convenience

代码语言:javascript
运行
AI代码解释
复制
var Car = function(make, topSpeed, color){
    this.make = make;
    this.topSpeed = topSpeed;
    this.color = color;
}

Car.prototype.describeSelf = function(){
    document.write('Hi, I am a: ' + this.make + ', my top speed is ' + this.topSpeed + ' and I am ' + this.color);
}

var corolla = new Car('toyota', 120, 'blue');

corolla.describeSelf();

//Code works fine up to here
var SportsCar = function(engineSize, make, topSpeed, color) {
    Car.call(this, make, topSpeed, color); 
    this.engineSize = engineSize;
};

var fordGt = new SportsCar('V8', 'ford', 205 , 'red');

fordGt.describeSelf();

我真的不明白call是做什么的。

编辑:看起来我不是很清楚我在问什么。问题的实质是让这一行工作:fordGt.describeSelf();,并得到关于我目前做错了什么的解释。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-14 07:43:46

添加使用add this注释的行。

代码语言:javascript
运行
AI代码解释
复制
var Car = function(make, topSpeed, color){
  this.make = make;
  this.topSpeed = topSpeed;
  this.color = color; 
}

Car.prototype.describeSelf = function(){
  document.write('Hi, I am a: ' + this.make + ', my top speed is ' +      this.topSpeed + ' and I am ' + this.color);
}

var corolla = new Car('toyota', 120, 'blue');

corolla.describeSelf();

//Code works fine up to here
var SportsCar = function(engineSize, make, topSpeed, color) {
  Car.call(this, make, topSpeed, color); 
  this.engineSize = engineSize;
};

// add this
SportsCar.prototype = Object.create( Car.prototype );

var fordGt = new SportsCar('V8', 'ford', 205 , 'red');

fordGt.describeSelf();

这是因为您确实希望正确设置原型链,以便新创建的对象在链中具有其父原型。

另一方面,如果您将该方法附加到对象本身

代码语言:javascript
运行
AI代码解释
复制
var Car = function(make, topSpeed, color){
  this.make = make;
  this.topSpeed = topSpeed;
  this.color = color; 
  this.describeSelf = function() ...
}

链可以被忽略(因为您已经从另一个构造函数调用了构造函数,但是您最终会将同一函数的多个实例附加到新创建的实例上。

票数 1
EN

Stack Overflow用户

发布于 2020-03-16 10:59:04

你可以继续这样做

代码语言:javascript
运行
AI代码解释
复制
  this.make = make;
  this.topSpeed = topSpeed;
  this.color = color;

  this.engineSize = engineSize;

,而不是使用call方法。但也许有时会有很多争论,你不会重复自己的话。call方法所做的是:

它运行Car构造函数中的代码,就好像代码是在sportCar构造函数中编写的一样。这是通过.call()方法中的'this‘参数完成的。

不过,在超继承的方式中,同样的事情是由ES6 ()方法完成的,这是必须的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38940005

复制
相关文章
JavaScript 继承
什么是继承? 继承就是你爸爸很多钱,所以你就继承你爸爸,变成了富二代,也是个有钱的主,突然你爸爸世界杯赌球,输了个精光,于是你也变成了穷光蛋。这个就是继承 非也,非也。
chuchur
2022/10/25
3330
JavaScript 继承
JavaScript组合继承
组合继承(Combination Inheritance)是 JavaScript 中一种常用的继承模式,它结合了原型链继承和构造函数继承的优点。通过组合继承,我们可以使用构造函数继承来继承实例属性,并通过原型链继承来继承共享的方法和属性。
堕落飞鸟
2023/05/18
2920
Javascript 组合继承 原型链继承 寄生继承
该继承通过构造函数继承原型链的方法和父类的属性,但该方法会有两次调用父类,第一次是在继承原型链,第二次在继承属性。
菜的黑人牙膏
2019/01/21
1.1K0
JavaScript实现继承
众所周知,JavaScript 这门语言在 ES6 出来之前是没有类(class)这一概念的,所以 JavaScript 中的类都是通过原型链来实现的。同样,使用 JavaScript 也能实现面向对象的实现继承。以下是《高程》(第三版)的读书笔记。
疯狂的技术宅
2019/03/28
5190
JavaScript实现继承
使用class继承非常简单。子类使用extends关键字表明继承于哪个类,并在子类中调用super(),这相当于使用call()改变this的指向。
不作声
2020/10/30
4130
JavaScript实现继承
本文不准备深入细节,主要是对《JavaScript高级程序设计中》介绍的JS如何实现继承做一个总结,毕竟好记性不如烂笔头。文末会附带一张神图,搞清楚这张图,原型链也就没有什么问题了。
leocoder
2018/10/31
6740
实现JavaScript继承
使用TypeScript或者ES2015+标准中的extends关键字是很容易实现继承的,但这不是本文的重点。JS使用了基于原型(prototype-based)的继承方式,extends只是语法糖,本文重点在于不使用extends来自己实现继承,以进一步理解JS中的继承,实际工作中肯定还是要优先考虑使用extends关键字的。
雪飞鸿
2020/12/29
5980
Javascript继承,再谈
     说到Javascript的继承,相信只要是前端开发者都有所了解或应用,因为这是太基础的知识了。但不知各位有没有深入去理解其中的玄机与奥秘。今本人不才,但也想用自己的理解来说一说这其中的玄机和奥秘。 一、类继承的发展吏 function实现的继承 function的继承是完全模仿了OOP的编程思想。实现的是类的继承 object.create实现的继承 用object.create来修改其原型 es6的继承 增加了class来模拟OOP的继承实现。上述两种继承实现,他都还是支持的。
sam dragon
2018/03/28
8100
JavaScript对象的继承
基于原型链,即把一个对象的原型设置为另一个对象的实例,那么这个对象实例也就拥有了另一个对象上的属性。
闲花手札
2021/11/17
7400
JavaScript 面试要点: 继承
ECMA-262 把原型链定义为 ECMAScript 的主要继承方式。其基本思想就是通过原型继承多个引用类型的属性和方法。对属性和方法的搜索会一直持续到原型链的末端。
Cellinlab
2023/05/17
1900
JavaScript 面试要点: 继承
前端基础-JavaScript继承
第4章 继承 学习目标 理解什么是继承 原型继承 4.1 什么是继承 现实生活中的继承 程序中的继承 所谓的继承,其实就是在子类(子对象)能够使用父类(父对象)中的属性及方法; 赋予后辈调用祖辈资源的权限,就是继承; 4.2 原型链继承 //声明构造函数Run function Run(){ this.p = function(){ console.log(this.name+'跑'); } } //声明构造函数Man function Man(name){ this.name
cwl_java
2020/03/26
4650
简单的JavaScript继承
我想要提取这些技术的精华,以一个简单的、可复用的方式进行展示,以便使这些特性更容易不依赖其他的内容而被理解。此外我想要使其可以被简单的、高效的被使用。这里展示了一个可以使用完成后的结果来实现的实例。(译者注:既完成后的代码可以用于实现下面这个功能)
疯狂的技术宅
2019/03/27
6030
JavaScript之对象继承
该方法创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真地是它做了所有工作一样返回对象。
laixiangran
2018/07/25
4430
Javascript 的继承总结
写惯了 TypeScript 的人很容易了解继承(extends),比如类的继承和接口的继承等,传送门:www.tslang.cn/docs/handbo… ,但是对于ES2015出现之前,JavaScript如何实现继承的呢?毫无疑问,只能通过原型链的方式实现继承,本篇主要是在读书时遇到了原型继承的问题,回顾以下原型继承的集中方式并整理成笔记方便日后查阅。
Meteors
2021/12/08
2740
javascript原型链继承
function user(names,age,jobs){ if(this instanceof user){ this.names=name; this.age=age; this.jobs=jobs; } else{ return new user(name,age,jobs) } } admin.prototype=new user(); function admin(namek,pass){ user.call(this,'jcomey','28','de
2021/11/08
6190
JavaScript继承与聚合
(1)call方法可以将一个函数的对象上下文从初始化变成由this来决定                     一个类去控制另一个类
wfaceboss
2019/04/08
7280
JavaScript继承与聚合
JavaScript原型与继承
对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 class 实现。(在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型的)。
用户1428723
2020/08/06
5510
JavaScript原型链继承
在JavaScript中,每个对象都有一个原型(prototype),原型本身也是一个对象。当我们访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript会自动去它的原型对象中查找。如果原型对象也没有找到,JavaScript会继续在原型对象的原型上查找,这样形成了一个原型链。
堕落飞鸟
2023/05/17
4130
JavaScript 的继承机制(图文)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://louluan.blog.csdn.net/article/details/19021801
亦山
2019/05/25
3410
JavaScript 面向对象继承详解
由于js不像java那样是完全面向对象的语言,js是基于对象的,它没有类的概念。所以,要想实现继承,一般都是基于原型链的方式;
书童小二
2018/09/03
5060
JavaScript 面向对象继承详解

相似问题

IE不理解CSS继承。

14

协议继承与类型不理解

11

我不理解基类的继承

30

我不理解这个java继承示例。

20

JPA/Hibernate注解不理解继承吗?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档