我在创建函数方面的测试已经过测试,这些函数在JavaScript中被称为构造函数。
function Clonetrooper(name, rank, age) {
this.name = name;
this.rank = rank;
this.age = age;
我已经开始使用这行代码
了 if (!(this instanceof Clonetrooper)) return new Clonetrooper();
}
以防止在没有new关键字的情况下调用函数。
老师/评分员注意到以下评论。
这不是必要的,实际上并没有做你想要的 它要做。 这将设置'这个'然后返回一个完全独立的实例 没有设置这些属性的Clonetrooper。
公平地说,我确实忘了添加这样的道具......
if (!(this instanceof Clonetrooper)) return new Clonetrooper(name, rank, age);
但事实证明并不重要......
像这样做,(就像在原始代码中一样)
if (!(this instanceof Clonetrooper)) return new Clonetrooper();
将返回具有这些属性的对象 - 只保留值undefined
new Clonetrooper
Clonetrooper {name: undefined, rank: undefined, age: undefined}
有人可以解释他们的意思吗?
答案 0 :(得分:0)
在调用return new Clonetrooper();
时,你没有传递任何参数,但它需要3个参数,导致Clonetrooper
对这些name, rank, age
的调用未定义,因此执行
this.name = name;
this.rank = rank;
this.age = age;
在新创建的对象中将这些属性设置为undefined,这就是你得到的原因
{name: undefined, rank: undefined, age: undefined}
答案 1 :(得分:0)
这会设置'这个'然后返回
是主要问题。你不能运行所有的属性初始化代码,然后最终决定实际创建一个合适的新实例,你需要在一开始就拯救。
一个完全独立的Clonetrooper实例,没有设置这些属性。
...对于参数值,它们意味着。
顺便说一句,在现代的ES6中,你写的是
function Clonetrooper(name, rank, age) {
if (!new.target) return new Clonetrooper(...arguments);
this.name = name;
this.rank = rank;
this.age = age;
}
或立即使用class
语法。