javascript - 在对象上有一个单独的初始化函数有什么好处?

标签 javascript

我的意思是这样的代码:

 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/

相关文章:

javascript - 如何在 Q.then() 回调中传播嵌套错误

javascript - Ag-Grid 树状结构根据验证将 cellClass 附加到 NodeChildren 单元

javascript - Google Forms/Apps Script/Hangouts Chat - 机器人消息内容单独发送而不是一起发送

javascript - 循环本地 JSON 文件中的数据以 HTML 格式输出

javascript - 直接在 JavaScript 中与相机通信

javascript - IE 将 mousemove 绑定(bind)到 body

javascript - lambda 。 anyPass 使用结果而不是 bool 值

javascript - Jest 匹配器匹配三个值中的任何一个

javascript - jquery响应式可点击图片幻灯片

javascript - 使用与标题不同的值自动完成