Javascript 为什么两个Object.create()调用会导致合并?

Javascript 为什么两个Object.create()调用会导致合并?,javascript,node.js,object,Javascript,Node.js,Object,我不明白如何在JavaScript中使用Object.create()。为什么在这段代码中,两个对象a和b合并,而它们是在两个不同的上下文中声明的 var l = { a: null, b: null } function a() { var a = Object.create(l); a.a = "a"; console.log('a : ', a.a, a.b); } function b() { var b = Object.create(l

我不明白如何在JavaScript中使用Object.create()。为什么在这段代码中,两个对象a和b合并,而它们是在两个不同的上下文中声明的

var l = {
   a: null,
   b: null
}

function a() {
    var a = Object.create(l);
    a.a = "a";
    console.log('a : ', a.a, a.b);
}

function b() {
    var b = Object.create(l);
    b.b = "b";
    console.log('b : ' + b.a, b.b);
}

function main() {
   a();
   b();
}

main();
这是输出:

a :  a null
b :  a b

如何将其隔离?

我认为您误解了
对象。使用类似
对象的内容创建
。分配

// This is not what you want
var a = Object.create(l);

// Do this instead
var a = Object.assign({}, l);

如果您希望函数的对象被“隔离”(我想您说的是没有副作用),那么您需要创建新对象,例如使用
Object.assign
(而不是
Object.create
).

对象的目的。创建是基于其参数的原型创建一个新对象;有关更多信息,请参阅。在运行OP的源代码时,我发现结果令人惊讶;你自己看看:
var l={
答:空,
b:空
}
函数a(){
var a=对象。创建(l);
a、 a=“a”;
console.log('a:',a.a,a.b.);
}
函数b(){
var b=对象。创建(l);
b、 b=“b”;
console.log('b:'+b.a,b.b.);
}
函数main(){
a();
b();
}

main()
@E43B5B我运行了您提供的代码示例,在没有合并的情况下得到了不同的结果;请看下面我的答案。你能解释一下原因吗?