gpt4 book ai didi

javascript - 关于 JavaScript 中的后备构造函数模式?

转载 作者:行者123 更新时间:2023-11-28 04:25:03 25 4
gpt4 key购买 nike

我接受了关于创建在 JavaScript 中作为构造函数调用的函数的知识测试。

function Clonetrooper(name, rank, age) {
this.name = name;
this.rank = rank;
this.age = age;

我已经开始练习使用这行代码

  if (!(this instanceof Clonetrooper)) return new Clonetrooper();
}

防止在没有 new 关键字的情况下调用该函数。

教师/评分者注意到以下评论。

This isn't necessary and actually isn't doing what you would want it to do. This will set properties on 'this' and then return a completely separate instance of Clonetrooper without those properties set.

公平地说,我确实忘记像这样添加 Prop ......

if (!(this instanceof Clonetrooper)) return new Clonetrooper(name, rank, age);

但实际上事实证明这并不重要......

这样做,(就像在原始代码中一样)

  if (!(this instanceof Clonetrooper)) return new Clonetrooper();

将返回一个具有这些属性的对象 - 只有它们保存值未定义

new Clonetrooper
Clonetrooper {name: undefined, rank: undefined, age: undefined}

有人可以解释一下他们的意思吗?

最佳答案

在调用 return new Clonetrooper(); 时,您没有传递任何参数,但它需要 3 个参数,导致使用这些 name 调用 Clonetrooper ,等级,年龄未定义,因此通过执行

  this.name = name;
this.rank = rank;
this.age = age;

这些属性在新创建的对象中设置为未定义,这就是为什么你会得到

{姓名:未定义,排名:未定义,年龄:未定义}

关于javascript - 关于 JavaScript 中的后备构造函数模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132439/

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