我正在使用简单的原型分配在java脚本中实现Prototypal inheritence这是我的代码 -
var Rectangle = function(heigth, width) {
this.height = height;
this.width = width;
}
Rectangle.prototype.area = function() {
return this.height*this.width;
}
var Square = function(length) {
this.height = this.width = length;
}
Square.prototype = Rectangle.prototype;
var sqr1 = new Square(5);
console.log(sqr1.area());
但是在 Square.prototype = Rectangle.prototype 的地方,建议使用 Square.prototype = Object.create(Rectangle.prototype)。任何人都可以告诉我潜在的差异,因为上面的代码工作正常。
答案 0 :(得分:1)
因为语句Square.prototype = Rectangle.prototype;
实际上复制了Rectangle.prototype
的引用并将其分配给Square.prototype
。 (原始类型按值复制,引用类型通过引用复制)。
因此,如果您要在Square.prototype
上添加一些属性和方法,它将修改原始的Rectangle.prototype
对象,而这不是您想要的。
Square.prototype = Object.create(Rectangle.prototype)
创建一个新的object
,其原型为Rectangle.prototype
,这是正确的方法。