什么';在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。就像您给出的示例一样,这些变量都指向内存中的同一个数组