首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我对javascript原型继承的误解

我对javascript原型继承的误解
EN

Stack Overflow用户
提问于 2010-12-22 05:32:36
回答 2查看 180关注 0票数 3

简单的问题。

代码语言:javascript
运行
AI代码解释
复制
    function p()
    {
        function A()
        {
            this.random = "random";
        }
        A.prototype.newfunc = function(){ alert("5");}

        function B()
        {

        }

        B.prototype = new A();

        var bObj = new B();
    }

Q1:当我设置B的prototype时,我不知道当/如果A的prototype更新时,B的prototype属性将如何更新。我的意思是,对我来说,它只是继承/复制所有这些属性。这并不是说:

代码语言:javascript
运行
AI代码解释
复制
B.prototype = A.prototype

其中B和A是同一个。

Q2:在A被返回并初始化到B的prototype对象之后,JS如何知道不包含该prototype属性?我的意思是,我们从来没有发生过这种情况,因为JS解释器知道只是为了砍掉A的原型的属性:

代码语言:javascript
运行
AI代码解释
复制
B.prototype = new A(); //any A object has an associated prototype object
    B.prototype.prototype;//after initialization we no longer have the separate prototype property of A
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-22 06:53:36

Q1:你自己也说过- prototype是用于继承的。因此,B继承了A的所有属性。当您添加或更改A的成员时,B也将更改。正如您所说的,它们并不相同,但A是B的超类,如果超类中的任何内容发生变化,那么子类也会发生变化。不过,您可以向B.prototype添加成员并更改其行为,而无需更改A。

试试这个:

代码语言:javascript
运行
AI代码解释
复制
    function A()
    {
    }

    A.prototype.alertname = function () 
    {
        alert (this.name);
    };

    function B()
    {
    }

    B.prototype = new A();

    var bObj = new B();
    var aObj = new A();

    A.prototype.name = "A"; 
    aObj.alertname(); // output is "A";
    bObj.alertname(); // output is "A";

    B.prototype.name = "B";
    aObj.alertname(); // output is "A";
    bObj.alertname(); // output is "B";

Q2:同样,继承不同于组合。当你赋值B.prototype时,你不只是把一个A类型的对象放在一个占位符里,还会改变所有B类型对象的“蓝图”。所以当你访问这个蓝图时,你得到的不是一个A类型的对象,而是一个B类型的蓝图,它包含对A类型蓝图的引用。这个蓝图不会有prototype类型的成员,因为prototype不是任何一个类的“常规”成员。将此代码添加到上面的代码中:

代码语言:javascript
运行
AI代码解释
复制
function iterateMembers ( obj ) {
    var str = "";
    for (var member in obj) {
        str += member + ", "
    }
    alert (str);
}

iterateMembers (aObj);
iterateMembers (A.prototype); 

注意aObj和A.prototype都不包含成员"prototype“。现在呼叫

代码语言:javascript
运行
AI代码解释
复制
iterateMembers (A);
alert (typeof(A));

现在应该很明显了,prototype是类型function的成员,而且由于function既不是A也不是B继承的(事实上,它不能被继承),所以它们都不包含名为"prototype“的成员。

票数 2
EN

Stack Overflow用户

发布于 2010-12-22 07:52:21

Q1:当我设置B的prototype时,我不知道当/如果A的prototype更新时,B的prototype属性将如何更新。我的意思是,对我来说,它只是继承/复制所有这些属性。

Function对象有一个prototype字段:

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

print(A.prototype) // [object Object]

使用new A创建对象时,结果对象包含一个constructor字段,该字段是对构造函数的引用:

代码语言:javascript
运行
AI代码解释
复制
var a = new A('Eric')

print(a.constructor == A) // True
print(a.constructor.prototype == A.prototype) // True

如果您尝试对a进行索引,但该字段未定义,JavaScript将尝试通过a的原型(例如a.constructor.prototype)来解析它。我们可以使用此方法向所有A实例添加内容:

代码语言:javascript
运行
AI代码解释
复制
A.prototype.greet = function() { print('Hi, ' + this.name + '!') }

a.greet() // Hi, Eric!

此字段解析以递归方式工作。

代码语言:javascript
运行
AI代码解释
复制
function B(name) { this.name = name.toUpperCase() }
B.prototype = new A
b = new B("Eric")
b.greet() // Hi, ERIC!

在最后一行中发生的事情是,JavaScript在b中没有找到'greet‘字段,所以它尝试b的原型,也没有找到它,所以它尝试*b的原型,依此类推,直到它用完了原型。

解释器只知道去掉A的原型的属性: B.prototype.prototype

没有任何东西被砍掉,你只是看错了东西。您需要:

代码语言:javascript
运行
AI代码解释
复制
B.prototype.constructor.prototype
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4506456

复制
相关文章
文章是原创的,为什么网站没有收录呢?
刚进入seo领域就知道原创文章对于网站的收录、展现量、权重等的影响,所以保证网站内容的原创度是seoer的基本功,但往往你的内容是原创的,但网站迟迟没有收录,让很多seoer感到迷茫,其实问题不一定只出现在文章上,你还应做以下分析:
蝙蝠侠IT
2021/05/19
6640
文章是原创的,为什么网站没有收录呢?
一些比较好的技术文章收录
10步完全理解sql http://blog.jobbole.com/55086/
luxixing
2019/05/29
4740
js检测文章是否被收录
昨天用公司的企业站发布文章后,想看看之前的网站收录了没有,但是又得通过第三方工具查询有点麻烦,看到crm系统的插件还有一个百度收录检测的,我把代码修改了一下,经过测试web页面通用,可以做成php插件
小唐同学.
2022/02/18
3.5K0
技术文章链接
Android Preference https://www.cnblogs.com/valenhua/archive/2017/10/03/7624640.html Interpolator 设置动画速度 https://www.cnblogs.com/onone/articles/6588335.html 自定义属性 https://blog.csdn.net/wzy_1988/article/details/49619773 http://www.cnblogs.com/angeldevil/
沪上队长
2018/04/25
8981
ITSS云计算服务标准符合性认证需要什么材料?
云计算服务能力标准符合性评估包括IaaS(分为公有云和私有云)、SaaS等。依据能力指标(分级指标ITSS分会另行发布),分为以下不同等级,其中:
龙域认证
2022/05/16
6560
如何才能让网站被搜索引擎快速收录
我理解的搜索引擎,有广义的和狭义的,因为从 web 1.0 到 web 3.0 再到现在的移动互联网时代,搜索引擎的概念也发生了一些变化,所以这里想分别阐述一下广义和狭义的搜索引擎。 狭义的搜索引擎就是指专门的搜索引擎网站,如百度、搜孤、360 搜索、谷歌、bing 等,这些是我们知道的,通常我们搜索信息都会直接到这些网站输入关键词搜索。 广义的搜索引擎是指微信、微博、facebook、twitter、淘宝、知乎、京东、当当这些等,之所把这些也算成搜索引擎,是因为这些网站经过时间和技术的积累,积累了大量的数
沈唁
2018/05/24
1.7K0
当我看技术文章的时候,我在想什么?
一个叫做“绝色天龙”的小伙伴写于 2018 年 7 月,总阅读 12w 多还挺高的。
why技术
2021/04/22
3950
当我看技术文章的时候,我在想什么?
[iOS] 技术文章收藏
现在关注了一些微博,订阅号,博客。每天都能看到不少好文章。现在收藏夹里放了不少文章,我觉得是时候整理一下,把文章分各类,做个目录出来,方便以后查阅。
wOw
2018/09/18
4561
程序员怎样才能写出一篇好的技术文章
首先,这算是一篇回答知乎问题 程序员怎样才能写出一篇好的博客或者技术文章?的文章。
技术小黑屋
2018/09/05
7880
如何快速让自己的文章被百度收录
网站编辑网站内容的设计师和建设者,通过网络对信息进行收集、分类、编辑、审核,然后通过网络向世界范围的网民进行发布,并且通过网络从网民那里接收反馈信息,产生互动。网络编辑是指利用相关专业知识及计算机和网络等现代信息技术,网站编辑的四个特点:超文本链接式编辑、全时化编辑、数据库化编辑、交互性编辑。
大葡萄
2018/09/05
1.8K0
如何快速让自己的文章被百度收录
腾讯云原创分享计划常见问题
A:「腾讯云原创分享计划」是腾讯云+社区为引入更多优质原创内容,打造技术影响力而推出的原创激励计划。只要你有原创优质技术内容,就可以申请加入该计划。
腾讯云开发者社区
2018/05/02
4.7K7
腾讯云原创分享计划常见问题
Wordpress检测文章手否被百度收录
开通博客后就痴迷于让更多的人看到自己的博客,在百度搜索资源提交链接,又配置了文章自动提交百度的代码,还是想知道文章是否被百度收录,于是找到了下面这篇文章:
宋天伦
2020/07/16
6120
这是技术文章模板
如果两个模型的概率分布是不一样的,所以在衡量模型的差异的时候,不能直接定性衡量两个模型之间的差异,而是需要定量的衡量两个模型的差异(比如极大似然估计、最小二乘法和交叉熵)
用户8871522
2022/03/30
1.2K0
这是技术文章模板
技术文章如何选题?
前一阵我在公司组织了“翻译与写作”兴趣小组。翻译这个东西,对于有些人来说感觉很简单,而对于英文不好或者对英文没信心的同学来说,其实是很难的一件事情。即便对于自以为英文还可以的同学,如果没有认真翻译过几万字,也未必能做好这件事。
姬小光
2018/09/05
6380
技术文章如何选题?
emlog判断文章有没有被百度收录的方法
首先我们找到模板文件夹下面的module文件,然后用网页编辑工具将这个文件打开,在文件的里面添加下面的的这一段php函数代码: <?php //判断内容页是否百度收录,并且以博主和或者理员身份访问博客
用户1456630
2018/05/25
6620
emlog判断文章有没有被百度收录的方法
们做网站建设的时候,有相当一部分的站长朋友是非常看重网站排名和搜索引擎优化这一块东西的,所以这些看重优化和排名的站长朋友经常要去判断自己的网站页面到底有没有被百度及时收录,以便及时做出正确的决策。
用户8099761
2023/05/10
4490
写技术文章需要遵循的
在这个自媒体井喷的时代,每天都会产出数以万计的文章。但大部分文章质量都不高:排版混乱的,连篇错别字的,逻辑混乱的等等等等。
前端GoGoGo
2018/08/24
3150
云计算服务标准符合性认证条件有哪些?
2.已按照通用要求和三级指标体系要求建立了云计算服务能力体系,且有效运行6个月以上;
龙域认证
2022/05/19
1.2K0
点击加载更多

相似问题

腾讯云专栏现在是什么模式?专栏文章审核要多久?

2408

云+社区的专栏文章标签有问题?

1176

自己写的原创文章一直被抄袭怎么办?

2459

我的文章被收录,为何原文链接不是我的原文地址?

2563

云+社区专栏能否从微信公众号自动同步文章?

3783
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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