JavaScript:解释继承、__proto__ 和原型(prototype)的图表

标签 javascript inheritance prototype

我有以下代码:

function Shape(x, y) {
    this.x = x;
    this.y = y;
}

Shape.prototype.describeLocation = function() {
    return 'I am located at ' + this.x + ', ' + this.y;
};

var myShape = new Shape(1, 2);

function Circle(x, y, radius) {
    Shape.call(this, x, y);  // call parent constructor
    this.radius = radius;
}

var myFirstCircle = new Circle(3, 4, 10);

Circle.prototype = Object.create(Shape.prototype);

Circle.prototype.calculateArea = function() {
    return 'My area is ' + (Math.PI * this.radius * this.radius);
};

var mySecondCircle = new Circle(3, 4, 10);

我想要一个视觉*解释:

  • Circle.prototype = Object.create(Shape.prototype);引起的变化
  • __proto__prototype 对象之间的联系
  • mySecondCircle 如何从 Shape 继承 describeLocation() 方法
  • 为什么 mySecondCircle 存在 calculateArea() 方法但 myFirstCircle 不存在:

> myFirstCircle.calculateArea()
Uncaught TypeError: undefined is not a function

> mySecondCircle.calculateArea()
"My area is 314.1592653589793"

* 当试图理解有关继承的 JavaScript 问题时,图表确实是 worth a thousand words , 我发现这些问题中的图表非常有帮助: 1 , 2 , 3 , 4 .

最佳答案

Diagram 全尺寸 — image , page .

Circle.prototype(原始) 是作为 function Circle(...) {...}

的副作用创建的

Circle.prototype(重新定义)Circle.prototype = Object.create(Shape.prototype);

创建

我还制作了这个动画版本来显示对象的创建顺序:

Animated diagram 全尺寸 — image , page .

关于JavaScript:解释继承、__proto__ 和原型(prototype)的图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29155986/

相关文章:

Javascript - 使用日期函数运行模拟的原型(prototype)函数

Javascript 子类化。设置构造函数属性

php - 对复选框单击和取消单击进行 +/- 计数

JavaScript - 无论窗口大小如何修复图像

java - 在final方法中获取 "child"对象的Class?

javascript - 为什么原型(prototype)在简单的 JavaScript 对象中不可用

javascript - 商店系统中的媒体查询

javascript - 导入 .less 变量以在 React 样式组件中使用

c# - 向上转型及其对堆的影响

Python 忽略提供给继承类中的元组的参数的默认值