我一直在研究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


现在是问题所在

关于我使用哪种方法创建新对象,确实存在区别吗?还是仅仅是口味上的区别?

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

问题:


@MasterBob提到了支持。不是所有浏览器都支持class方法吗?如果不支持,那么不支持哪些浏览器?
遗产。版本是继承不同的属性还是完全相同?

最佳答案

差异不大,但有一些差异:


class myClass extends myClass2


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


浏览器支持。


ECMAScript 6引入了类,但是构造函数已经存在多长时间了?当然,很长一段时间。某些浏览器可能不支持类。

因此,总的来说,我认为应该将构造函数用于浏览器支持。但是,如果您打算在将来的某个时间编写代码,则类将变得更整洁并且更易于阅读。

10-02 08:26