javascript - 新的 myFunction() 与新的 myClass()

标签 javascript class oop

我一直在研究 JavaScript 中的 OOP,我在 MDN 上看到了这些注释。 .

函数语法

我之前创建过几个类,但是我使用的语法一直是创建一个函数。见下文。

function myFunction(myProp1, myProp2)
{
    // see if set, otherwise use the default value (after the colon)
    myProp1 = typeof myProp1 !== "undefined" ? myProp1 : 1;
    myProp2 = typeof myProp2 !== "undefined" ? myProp2 : 2;

    // simple function
    this.doSomething = function ()
    {
        return myProp1 + myProp2;
    }
}
var myObj = new myFunction(2, 4);
myObj.doSomething(); // returns 6

类语法

今天我发现可以使用以下代码实现相同的目的。

class myClass
{
    constructor(myProp1, myProp2)
    {
        // see if set, otherwise use the default value (after the colon)
        this.myProp1 = typeof myProp1 !== "undefined" ? myProp1 : 1;
        this.myProp2 = typeof myProp2 !== "undefined" ? myProp2 : 2;
    }

    // simple function
    doSomething()
    {
        return this.myProp1 + this.myProp2;
    }
}
var myObj = new myClass(2, 4);
myObj.doSomething(); // returns 6

问题来了

对于我使用哪种方法创建新对象,真的存在差异还是仅仅是品味差异?

编辑
为了澄清,我将在下面提出一些问题。

问题:

  1. @MasterBob 提到了支持。不是所有浏览器都支持 class 方式吗?如果不支持,则不支持哪些浏览器?
  2. 继承。两个版本继承不同的属性还是完全相同?

最佳答案

没有太多区别,但这里有一些:

  1. class myClass extends myClass2

现在,这可能不是那么有问题,因为有 myFunction.prototype = Object.create(myFunction2);,但是是的,它可能有点复杂。

  1. 浏览器支持。

ECMAScript 6 引入了类,但构造函数出现多久了?当然,相当长的时间。某些浏览器可能不支持类。

所以,总而言之,在我看来,您应该使用构造函数来支持浏览器。但是,如果您打算在遥远的将来的某个时候编写此代码 - 类会更整洁且更易于阅读。

关于javascript - 新的 myFunction() 与新的 myClass(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42939182/

相关文章:

javascript - 当IF满足要求时停止Do While LOOP

ruby-on-rails - 这行代码似乎适用于 Rails 2.x.x 但不适用于 3.x.x?有人可以帮忙解决 "translate"吗?

c# - C#中的幂等接口(interface)方法

javascript - 简单节点模块命令行示例

javascript - 如何提高 highcharts 图表创建和渲染的性能

javascript - 编译 Laravel、Webpack 和 Sparkline 的问题

javascript - jquery复选框元素类click

python - 使用cython来早期类型化类属性

c++ - 如何在父类中创建子类的对象

java - 自动删除已删除对象的对象