function A() {
this._init.apply(this, arguments);
}
A.prototype._init = function() {
// ...
}
let a = new A();
我不明白为什么这个划分是必要的?如果构造函数体中的所有代码都可以放在构造函数本身中,为什么还要在同一个对象的上下文中调用构造函数体中的另一个方法呢?这样的划分有什么好处?
并进一步。为什么#apply() 在这里?一个简单的调用不会this._init(arguments)
完成同样的事情吗?
事实证明,这里的重点在于隐藏良好的文档。在 StyleGuide'ah 中,找到了以下信息:
这个决定的原因是什么,我无法回答。正如@Grundy 在对问题的评论中所建议的那样,将其推到此处的决定
.apply()
是由于尝试重新创建扩展运算符的功能。顺便说一句,解释代码的引擎(GJS)允许您使用spread。因此,特别是在这种情况下,使用.apply()
不是由于任何原因,除非代码作者不知道存在这样的运算符。第一个函数是一个类声明和一个构造函数调用,调用它的任何实现。第二个函数是构造函数的具体实现。您可以继承它并将其更改为另一个。应用和两个“有趣”的 this 是保存上下文所必需的,你不能只是替换它 - 只是尝试这样做并执行代码。