我的意思是这样的代码:
function MyObject(x, y, z) {
this.init(x, y, z);
}
MyObject.prototype = {
constructor: MyObject,
init: function(x, y, z) {
// actually use x, y, z
},
other methods
};
为什么不直接使用 init 方法并在构造函数中进行所有初始化?
最佳答案
没有。真的,没有。您的构造函数只做init
之外的任何事情。这或多或少是一种反模式。
初始化对象的方法的优点是它可以被多次调用(在同一个对象上),用于对象池或只是重置它。然而,每个精心设计的 JS 对象确实已经拥有该方法:它称为 .constructor()
。它是构造函数,默认情况下在其自己的原型(prototype)上可用,并且通常在必要时显式地放置它(如您的示例中所做的那样)。
这意味着有一个额外的 init
方法是相当无用的,通常性能较差且更冗长。除非你使用这种冗长的方式来强调(通过名称和声明风格)将其用作一种方法,并且可能是为了简化计划中的重构,以便实际的构造函数比init
方法(例如创建常量字段)。不过,我会避免过早地这样做,yagni。
关于javascript - 在对象上有一个单独的初始化函数有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26417247/