什么';在JavaScript中继承时实例化函数的意义是什么?

什么';在JavaScript中继承时实例化函数的意义是什么?,javascript,Javascript,我一直认为,从另一个函数继承原型时,Object.create(basefunc.prototype)是一种方法。另一个选项是newbasefunc(),其缺点是调用基本构造函数 但是简单地设置func.prototype=basefunc.prototype有什么坏处呢 考虑以下代码段: function foo(){ } foo.prototype.blah = 1; function bar(){ } bar.prototype = foo.prototype; // instea

我一直认为,从另一个函数继承原型时,
Object.create(basefunc.prototype)
是一种方法。另一个选项是
newbasefunc()
,其缺点是调用基本构造函数

但是简单地设置func.prototype=basefunc.prototype有什么坏处呢

考虑以下代码段:

function foo(){   
}
foo.prototype.blah = 1;

function bar(){
}
bar.prototype = foo.prototype; // instead of Object.create(foo.prototype)
                               // or new foo()
bar.prototype.constructor = bar;

bar.prototype.bleh = 1;

console.log(new bar()); // bar {blah: 1, bleh: 1} 

如果你按照你的建议做了,那么在foo.prototype中添加一个方法会在bar.prototype中添加一个方法,这正是你想要的。但是,将方法添加到bar.prototype也会将该方法添加到foo.prototype,这不是您想要的。向子级添加方法不应影响父级可用的方法

这样做的原因是bar.prototype和foo.prototype实际上是指同一个对象。这并不是说您已经基于bar.prototype创建了一个副本,这正是您想要的

您在数组中也看到了同样的情况,这就是为什么您经常会看到这样的代码:

var newArray = oldArray.slice()
如果没有该切片,更改newArray也将更改oldArray。就像您给出的示例一样,这些变量都指向内存中的同一个数组