首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用extend函数

使用extend函数
EN

Stack Overflow用户
提问于 2012-01-18 10:06:17
回答 1查看 96关注 0票数 0

这是我的第一篇文章!关于javascript中的继承,我有一个简短的问题。

当然,'extend2‘方法用于使用for-in循环从父对象继承子对象。

代码语言:javascript
复制
var extend2 = function (child, parent) {
    var c = child.prototype;
    var p = parent.prototype;
    for (var i in p) {
        c[i] = p[i];
    }
}

我目前正在阅读Stoyan Stefanov的“面向对象的Javascript”。这是一本很棒的书。

谁能给我一个很好的详细的解释,为什么孩子的原型对象没有被完全覆盖或替换,而只是被增强了?

为什么当对象继承时,它们会复制(原始数据类型),而不是使用extend2函数作为引用进行查找?

这真的很有帮助,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-18 10:20:07

javascript中的原始数据类型是通过值传递的,而不是引用。因此,当你复制一个值时,它实际上是在复制它,而不是引用它。传统上,这是因为基元在内存中确实是以这种方式编码的(因此基元int 7将在内存中编码为0x7。然而,在处理对象时,它们被编码为指向实际对象所在的内存位置的指针。因此,当您复制值时,它仅仅是引用指针的副本,而不是该指针引用的对象。

至于孩子的原型没有被替换的事实,那是因为java中的原型仅仅是另一个对象。因此,原型可能如下所示:

代码语言:javascript
复制
{
    someField: 5
}

这将指示该对象的实例将使用值为5的名为someField的字段进行初始化。使用上面的代码,对象中的每个条目都会复制到子原型,但不会删除任何内容。因此,如果子原型看起来像这样:

代码语言:javascript
复制
{
    someField: 10
    someOtherField: 3
}

然后,执行上面的extend2命令将覆盖someField,但不会覆盖someOtherField,因此生成的原型将为:

代码语言:javascript
复制
{
    someField: 5
    someOtherField: 3
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8904264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档