javascript - JavaScript 对象是单向链接还是双向链接?

标签 javascript inheritance

我正在尝试 Douglas Crokford 视频中的这个示例,据我所知,更改新对象不应更改旧对象。

   var oldObject = {
        firstMethod:function(){
            console.log("This is first method");
        },
        secondMethod:function(){
            console.log("This is second method");
        }
    }

    var newObject = Object(oldObject);

    newObject.thirdMethod=function(){
        console.log("thirdMethod");
    }

    newObject.firstMethod=function(){
        console.log("I am not first method");
    }

    newObject.firstMethod();
    oldObject.firstMethod();

输出:

I am not first method
I am not first method

但我预料到了,

I am not first method
This is first method

请告诉我我哪里错了。

最佳答案

如果您调用the Object constructor as a function ,它执行类型转换(在这种情况下什么也不做,因为参数已经是一个对象)。 (如果您要 call it as a constructor 并向其传递一个对象,就像您在那里所做的那样,那么它只会返回该对象)。

newObject 不是一个新对象,它是相同对象。因此,对 newObject 的任何修改也是对 oldObject 的修改。

可能你想要:

var newObject = {};
newObject.prototype = oldObject;

而不是 Object() 调用。

关于javascript - JavaScript 对象是单向链接还是双向链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971629/

相关文章:

javascript - ReactJS 下拉菜单(使用语义 UI)不会触发 onChange 事件?

javascript - 是否有可能以纯函数式的方式实现 Haskell 的 unzip 的 js 版本?

javascript - 是否有可能通过 Javascript 捕获 CSP 错误

c++ - 奇怪的重复模板模式和虚拟继承

javascript - 用 Jest 模拟高阶组件

php - 使用 javascript 添加的文本框没有按预期响应附加到它的 js

java静态绑定(bind)和多态性

oop - 在 Haskell 中扩展数据结构的继承

javascript - 我们是否应该在 ES6 类的原型(prototype)中包含方法以提高性能?

java - 如何使用 Framework Simple 将数据映射到正确的继承类