Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对原型遗传的澄清

对原型遗传的澄清
EN

Stack Overflow用户
提问于 2016-02-20 13:38:23
回答 1查看 38关注 0票数 0

我有一个原型继承,如下所示,Student扩展了Guru。我有三个问题,谁能澄清同样的问题。

代码语言:javascript
运行
AI代码解释
复制
function Guru(name){
  this.name = name;
}

Guru.prototype.copy = function(){
  return this.constructor(this.name);
}

function Student(name){
  Guru.call(this)
  this.name = name;
}

Student.prototype = Object.create(Guru.prototype);
Student.prototype.constructor = Student;
var stu = new Student("John Cena");

console.log(stu.constructor);
console.log(stu.__proto__);
  1. 为什么我们要避免Student.prototype = new Guru();
  2. 这两者之间有什么区别: console.log(stu.constructor);console.log(stu.__proto__); 打印如下: 函数:古鲁大师{构造函数:函数:学生}
  3. constructor.prototypeprototype.constructor的差异?我们有javascript中的constructor.prototype吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-20 13:56:08

  1. 为什么我们要避免Student.prototype = new Guru()

因为Guru构造函数需要一个实例,而不是一个子类。在该构造函数中创建的属性应直接分配给实例。

在你的例子中,这并不重要,但是想象一下:

代码语言:javascript
运行
AI代码解释
复制
function C1() { this.o = []; }
function C2() {}
C2.prototype = new C1();
var c1a = new C1(), c1b = new C1(),
    c2a = new C2(), c2b = new C2();
c1a.o.push(123);
c2a.o.push(456);
c1b.o; // []    -- The property is NOT shared among C1 instances
c2b.o; // [456] -- The property is shared among all Sub instances

  1. stu.constructorstu.__proto__有什么区别?

创建Student构造函数时,它会自动接收带有指向Studentconstructor属性的prototype

相反,__proto__是一个getter,它返回对象的[原型]。注意,这不是很多标准(它只在浏览器附件中定义),您应该使用Object.getPrototypeOf

因此,stu.constructor (从Student.prototype继承)是Studentstu.__proto__ (从Object.prototype继承)是Student.prototype

  1. constructor.prototypeprototype.constructor的区别

在原型上使用constructor.prototype是没有意义的,因为它提供了相同的原型(假设它没有被更改)。

在实例上使用constructor.prototype提供它继承的原型(假设它没有阴影,也没有被修改)。

在构造函数上使用prototype.constructor是没有意义的,因为它提供了相同的构造函数(假设它没有被更改)。

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

https://stackoverflow.com/questions/35529371

复制
相关文章
澄清对AMP的十个误解
AMP 是一套开源的 web 组件格式和类库。与其它类库或者框架相比,AMP 最大的区别在于,它采用了白名单策略,来约定你可以做什么。
疯狂的技术宅
2019/03/28
9950
澄清对AMP的十个误解
对Javascript 类、原型链、继承的理解
  和其他面向对象的语言(如Java)不同,Javascript语言对类的实现和继承的实现没有标准的定义,而是将这些交给了程序员,让程序员更加灵活地(当然刚开始也更加头疼)去定义类,实现继承。(以下不讨论ES6中利用class、extends关键字来实现类和继承;实质上,ES6中的class、extends关键字是利用语法糖实现的)
smy
2019/02/13
6840
对Javascript 类、原型链、继承的理解
饿了么与阿里对赌失败?官方澄清:严重失实
源 \ Techweb 文 \ 周小白 2月27日消息,昨日下午,有消息称,3个月内阿里将按95亿美元收购饿了么全部股份,双方已签排他协议。对此,阿里方面表示不予置评,饿了么在官微回应称,“坊间传言的常规操作,我们不予置评。 ” 不过,随后有阿里内部人士向部分媒体确认了阿里将全资收购饿了么一事,但具体收购细节未透露,也有消息称“95亿美元”的收购价实为饿了么现在的估值,也不是最终的收购价格。 图源网络 据消息人士透露,阿里全资收购饿了么可能与饿了么没有完成对赌协议有关。此前,曾有消息称,阿里
顶级程序员
2018/04/26
6460
饿了么与阿里对赌失败?官方澄清:严重失实
关于Windows内存的几个概念澄清
狭义的虚拟内存是分页文件pagingfile,通过SystemPropertiesPerformance.exe /pagefile命令设置pagingfile大小
Windows技术交流
2021/12/25
2.4K0
面试官:谈谈你对原型的理解
js 在 es6 之前,没有类的概念,只有构造函数,所以这个构造函数,你可以认为他就是类,只不过是以函数的形式呈现的,每个对象都有一个原型对象,prototype 就表示对象的原型。
公众号---人生代码
2021/02/24
6790
面试官:谈谈你对原型的理解
一文澄清网上对 ConcurrentHashMap 的一个流传甚广的误解!
上周我在极客时间某个课程看到某个讲师在讨论 ConcurrentHashMap(以下简称 CHM)是强一致性还是弱一致性时,提到这么一段话
kunge
2022/05/17
5360
一文澄清网上对 ConcurrentHashMap 的一个流传甚广的误解!
day017: 谈谈你对原型链的理解
在JavaScript中,每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype属性,这个属性指向函数的原型对象。
用户3806669
2021/03/10
7060
澄清学习编程的10大误区
在编程行业,一直流传着很多误区。下面让我们一起来纠正10个有关编程的常见误区,以帮助编程初学者或有志成为程序员的人,更理性地认识编程。
LiveEdu
2018/05/21
8080
澄清学习编程的10大误区
关于F统计量的澄清
在孟德尔随机化研究中,弱工具变量偏倚(weak instrument bias)是需要我们认真对待的一个问题,它通常是因为样本量较小导致的。在往期推送中,米老鼠和大家介绍过评价弱工具变量偏倚的策略------孟德尔随机化之F统计量。一般而言,当F 统计量大于经验值10时,我们认为工具变量法估计值的偏倚大约是观察性研究的10%,因此F大于10这个标准在孟德尔随机化研究中广为使用。然而,这样的盲目使用不见得是合理的。
生信与临床
2022/08/21
2.6K0
关于F统计量的澄清
java中byte的用法_澄清池的工作原理
缓冲区在计算机世界中随处可见,内存中的多级缓冲区,io设备的缓冲区等等,还有我们经常用的内存队列,分布式队列等等。缓冲区,平衡了数据产生方和数据消费方的处理效率差异,提高了数据处理性能。
全栈程序员站长
2022/09/28
5760
原型设计真的对用户体验那么重要吗?
用户体验,英文为User Experience,简称UE或UX,是用户在使用产品过程中建立起来的一种纯主观感受,是人们对于针对使用或期望使用的产品、系统或者服务的认知印象和回应。作为一个刚接触UX的新
奔跑的小鹿
2018/03/16
8150
原型设计真的对用户体验那么重要吗?
JavaScript学习笔记022-原型链0原型继承0对象的深浅拷贝extends
Author:Mr.柳上原 付出不亚于任何的努力 愿我们所有的努力,都不会被生活辜负 不忘初心,方得始终 这几天一直在做node项目实训 学到了很多实际企业开发知识 学的东西 跟要运用起来的东西 就好像教会你1+1=2 然后让你做高等代数 还需要加倍的努力啊 兄弟 <!DOCTYPE html> <!-- 文档类型:标准html文档 --> <html lang='en'> <!-- html根标签 翻译文字:英文 --> <head> <!-- 网页头部 --> <meat charset='UTF
Mr. 柳上原
2018/09/05
4170
强大的原型和原型链
本文主要讲解了JavaScript中函数原型属性以及原型链的概念,并通过实例介绍了原型链的查询和继承机制。同时,文中还介绍了自定义构造函数如何实现原型继承,以及使用原型继承的好处。
okaychen
2018/01/05
7600
强大的原型和原型链
强大的原型和原型链
本文主要讲解了JavaScript中函数原型属性及其在编程实践中的应用,包括原型链、构造函数、继承和原型继承等概念。通过实例剖析了原型链的查询顺序、原型继承的运作方式以及自定义构造函数的实现。总结部分强调了原型属性在JavaScript中的重要性,是编程中需要了解和掌握的基础知识。"
okaychen
2018/01/05
8370
强大的原型和原型链
[我的理解]Javascript的原型与原型链
一、原型与原型链的定义 原型:为其他对象提供共享属性的对象     注:当构造器创建一个对象,为了解决对象的属性引用,该对象会隐式引用构造器的"prototype"属性。程序通过constructor.prototype可以直接引用到构造器的"prototype"属性。并且添加到对象原型里的属性,会通过继承与所有共享此原型的对象共享。 原型链:每个由构造器创建的对象,都有一个隐式引用(叫做对象的原型)链接到构造器的"prototype"属性。再者,原型可能有一个非空隐式引用链接到它自己的原型,以此类推,这叫
sam dragon
2018/01/17
8770
[我的理解]Javascript的原型与原型链
原型、原型链和原型继承
上一小节是从继承的层面,介绍原型继承,但是没有具体说什么是原型。只提到构造函数的 prototype, 那么 prototype 是什么?它的作用又是什么?
玖柒的小窝
2021/11/02
7760
原型、原型链和原型继承
遗传算法的matlab代码_遗传算法实际应用
(1)初始化。设置进化代数计数器 \(g=0\),设置最大进化代数 \(G\),随机生成 \(NP\) 个个体作为初始群体 \(P(0)\)。
全栈程序员站长
2022/10/01
1.8K0
遗传算法的matlab代码_遗传算法实际应用
遗传算法_aforge遗传算法
遗传算法组成: 1.编码 2.适应度函数 3.遗传算子:选择、交叉、变异 4.运行参数
全栈程序员站长
2022/10/02
9220
遗传算法_aforge遗传算法
10个需要澄清的边缘计算误区
对于不同的技术领导者来说,边缘计算意味着不同的东西,从“云计算之外的事物”到“捕获、存储、处理、分析最接近生成位置的数据的实践”。需要了解边缘计算是什么,同样重要的是还要了解边缘计算不是什么。
静一
2019/09/24
7810
澄清Fundebug录屏技术的几点误会
视频中,当鼠标点击“场景重现”,会立即播放一段“视频”。它完整的记录了用户点餐时候遇到障碍之前的一段操作。这段“视频”看起来和真的视频几乎一样,所以会被误以为是通过录制视频来记录的。实际上,它并非视频。我们在客户端通过记录操作序列(用户行为、DOM 变化),在重放的时候将操作序列再执行一遍,看起来就像视频一样了。当然,涉及到很多复杂的细节,在这里不便赘述。近期,SMARTX 公司开源的rrweb也使用了类似的技术。如果感兴趣,可以去了解详细内容。
Fundebug
2019/12/30
5680
澄清Fundebug录屏技术的几点误会

相似问题

对Javascript原型遗传的理解

22

对JavaScript原型遗传的困惑

30

理解原型遗传

25

Javascript原型遗传

11

JavaScript原型遗传

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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