为了账号安全,请及时绑定邮箱和手机立即绑定

有什么区别和更好用:工厂函数与构造函数。请说明您的方法,以便我学习

有什么区别和更好用:工厂函数与构造函数。请说明您的方法,以便我学习

Smart猫小萌 2023-01-06 15:56:19

我有两个功能做同样的事情(我可能是错的,但在我的新手看来他们做同样的事情):


// Factory Function

function createCircle(radius) {

    return {

        radius,

        draw: function() {

            console.log('draw');

        }

    }

}

const newCircle = createCircle(2);

console.log(newCircle);


// Constructor Function

function Circle(radius) {

    this.radius = radius;

    this.draw = function() {

        console.log('draw')

    }

}

const another = new Circle(2);

console.log(another);

这些方法有优缺点吗?只是寻求更有经验的开发人员的意见。


查看完整描述

1 回答

?
慕沐林林

TA贡献1789条经验 获得超9个赞

在大多数情况下,我会说构造函数更好。

  • instanceof它允许您使用运算符(即circle instanceof Circle)检查对象是否为 Circle

  • 它使代码更具可读性——当有人看到new Circle他们知道一个类正在被实例化时,他们知道它将具有可预测的行为,而对于第一种情况,他们需要createCircle在知道之前检查函数定义(或文档)关于此函数返回的内容的任何信息。

  • 您可以进一步优化构造函数 - 如果您在类的原型(即)上定义draw函数,则每次调用时都不会声明它。Circle.prototype.draw = function(){/*etc*/}new Circle

也就是说,如果您要创建一个只有几个属性而没有方法的对象,那么使用第一个示例是完全合理的。


查看完整回答
反对 回复 2023-01-06
  • 1 回答
  • 0 关注
  • 15 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信