我一直在阅读 Stoyan Stefanov 的 JavaScript 模式书,其中一种为构造函数强制执行 new 运算符的模式是这样的
function Waffle() {
if (!(this instanceof Waffle)) {
return new Waffle();
}
this.tastes = "yummy";
}
Waffle.prototype.wantAnother = true;
以这种方式编写时,您可以通过以下任何一种方式调用 Waffle
var first = new Waffle(),
second = Waffle();
我认为这是一个有用的功能,不确定它是否在未来版本的 ecma/javascript 中实现
我自己想出了一些东西,我认为每次创建构造函数时都可以复制和粘贴
像这样的东西
function checkInstance (name) {
if (name.constructor.name === undefined) {
return "construct it"
} else {
return false;
}
}
function Waffle() {
var _self = checkInstance.call(this, this);
if (_self === "construct it") {
return new Waffle()
}
this.tastes = "yummy"
}
var waffle = Waffle()
waffle
因此,我可以通过 new Waffle 或 Waffle() 调用 Waffle,并且仍然让它返回一个对象
我遇到的问题就在这里
if (_self === "construct it") {
return new Waffle()
}
无论如何我可以参考new Waffle()
而不参考构造函数的实际名称含义,所以我可以每次复制和粘贴它而不必更改任何内容。这意味着我可以将 Waffle() 保存为变量并执行类似的操作
return new var
我希望我可以使用 this.name ,但这在调用它之前也不起作用。
我有一种感觉,我不能,但至少想问问堆栈溢出的一些人是否有可能
再次感谢您的评论和反馈