在JavaScript中使用protypal inheritence分配简单原型和使用Object.Create(Object.prototype)之间的差异?

时间:2017-03-22 07:05:18

标签: javascript inheritance

我正在使用简单的原型分配在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)。任何人都可以告诉我潜在的差异,因为上面的代码工作正常。

1 个答案:

答案 0 :(得分:1)

因为语句Square.prototype = Rectangle.prototype;实际上复制了Rectangle.prototype的引用并将其分配给Square.prototype。 (原始类型按值复制,引用类型通过引用复制)。

因此,如果您要在Square.prototype上添加一些属性和方法,它将修改原始的Rectangle.prototype对象,而这不是您想要的。

Square.prototype = Object.create(Rectangle.prototype)创建一个新的object,其原型为Rectangle.prototype,这是正确的方法。