gpt4 book ai didi

javascript - 关于 Javascript 原型(prototype)的一些事情

转载 作者:行者123 更新时间:2023-11-28 17:37:53 26 4
gpt4 key购买 nike

我编写的Javascript代码如下:

function Shape() {
this.x = 0;
this.y = 0;
}
function Rectangle() {
Shape.call(this); // call super constructor.
}
Rectangle.prototype = Object.create(Shape.prototype);
function Tmp() {
this.a = 0;
this.b = 0;
}
Rectangle.prototype.constructor = Tmp;
var rect = Object.create(Rectangle.prototype);
console.log(rect)

那么输出是:

enter image description here

矩形应该由构造函数Tmp初始化。我的问题是,由构造函数Tmp初始化的对象矩形的属性a和b在哪里?

最佳答案

The rect should be initialized by constructor function Tmp

如果你想要这样,你会这样做:

Tmp.call(rect);

...之后

var rect = Object.create(Rectangle.prototype);

function Shape() {
this.x = 0;
this.y = 0;
}
function Rectangle() {
Shape.call(this); // call super constructor.
}
Rectangle.prototype = Object.create(Shape.prototype);
function Tmp() {
this.a = 0;
this.b = 0;
}
//Rectangle.prototype.constructor = Tmp;
var rect = Object.create(Rectangle.prototype);
Tmp.call(rect);
console.log(rect);

Object.create 根本不调用任何函数,它只是创建具有给定原型(prototype)的对象。因此, RectangleShapeTmp 都不会通过执行 var rect = Object.create(Rectangle.prototype); 来调用>.

或者,如果您还希望 Rectangle 完成其工作,请将 Object.create 调用替换为:

var rect = new Rectangle();
Tmp.call(rect);
<小时/>

Rectangle.prototypeconstructor 属性设置为 Tmp,而不是 ,这非常奇怪矩形。我强烈建议不要这样做。如果您只想让 Tmp 初始化实例,则无需这样做。 SomeFunction.prototype 引用的对象的 constructor 属性应该是 SomeFunction,而不是其他任何东西。

关于javascript - 关于 Javascript 原型(prototype)的一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48662147/

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