gpt4 book ai didi

javascript - 从子对象访问父对象

转载 作者:行者123 更新时间:2023-11-28 02:38:13 26 4
gpt4 key购买 nike

我试图弄清楚下面的代码是如何工作的。有人可以解释一下“创建一个指向父级原型(prototype)对象的 super 属性”是什么意思吗?当它说“this.constructor.uber”指向父级的原型(prototype)时,到底是什么意思?我已经挠头有一段时间了。如果有人能解释 Shape() 函数中发生的情况,我将非常感激。

function Shape() {}
// augment prototype
Shape.prototype.name = 'shape';
Shape.prototype.toString = function () {
var result = [];
if (this.constructor.uber) {
result[result.length] = this.constructor.uber.toString();
}
result[result.length] = this.name;
return result.join(', ');
};


function TwoDShape() {}
// take care of inheritance
var F = function () {};
F.prototype = Shape.prototype;
TwoDShape.prototype = new F();
TwoDShape.prototype.constructor = TwoDShape;
TwoDShape.uber = Shape.prototype;
// augment prototype
TwoDShape.prototype.name = '2D shape';

function Triangle(side, height) {
this.side = side;
this.height = height;
}
// take care of inheritance
var F = function () {};
F.prototype = TwoDShape.prototype;
Triangle.prototype = new F();
Triangle.prototype.constructor = Triangle;
Triangle.uber = TwoDShape.prototype;
// augment prototype
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getArea = function () {
return this.side * this.height / 2;
}

var my = new Triangle(5, 10);
my.toString()

输出:“形状,2D形状,三 Angular 形”

最佳答案

在 Javascript 继承中,不支持访问 super 方法,因此我在 uber 中看到的是可以访问其父方法。
将其命名为父级,如下所示:
TwoDShape.parent = Shape.prototype

这样您就可以直接访问父属性:TwoDShape.parent.name 应返回 'shape'

toString() 在这里实际执行的操作是:

var result = []; //declare an array
if (this.constructor.parent) { //if there is a parent prototype
result[0] = this.constructor.parent.toString(); //set the 0 position of result with the return value of parent's toString() method.
}
result[result.length] = this.name; //set the position (0 or 1, if we had a parent it will be 1, otherwise 0) with the current name.
return result.join(', '); //return the names joined with a comma

请注意,我将 uber 更改为 parent,以便其更具可读性。 result 的第一次赋值将始终为 0,因此无需调用 result.length

调用将为每个对象返回什么?:
Shape.toString();: 'shape' (没有父级)
TwoDShape.toString();:'shape,2D shape'('shape' 用于调用 Shape.toString() ;'2D shape' 作为其自己的名称,已加入)。
Triangle.toString();: 'shape, 2D shape, Triangle' ('shape, 2D shape' 用于调用 TwoDShape.toString();'Triangle' 为其自己的名称,已加入)。

关于javascript - 从子对象访问父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13105347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com