首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新myFunction()与新myClass()

新myFunction()与新myClass()
EN

Stack Overflow用户
提问于 2017-03-21 22:16:59
回答 3查看 211关注 0票数 1

我在JavaScript中对OOP做了一些研究,并在MDN上看到了这些注释。

函数语法

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

代码语言:javascript
复制
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

类语法

今天,我发现使用以下代码实现同样的目标是可能的。

代码语言:javascript
复制
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. 遗产继承。这两个版本是继承不同的属性,还是它们完全相同?
EN

回答 3

Stack Overflow用户

发布于 2017-03-21 22:23:45

引用MDN

在JavaScript2015中引入的JavaScript类比ECMAScript现有的基于原型的继承更具有语法优势。

而且上面写着

类语法没有在JavaScript中引入新的面向对象继承模型。

我认为考虑到这一点,我们可以说这只是口味的不同,至少取决于

ECMAScript 2015 (第6版,ECMA-262)

票数 1
EN

Stack Overflow用户

发布于 2017-03-21 22:30:23

我发现的一个不同之处是,使用旧语法扩展内置类是不可能的,但我认为使用新语法是可能的。我不知道现在支持得有多好。这个问题的更多细节:扩展Javascript中的承诺

票数 1
EN

Stack Overflow用户

发布于 2017-03-21 22:26:32

有一些不同之处,这不仅仅是品味的问题。两者之间最重要的区别是:您可以忘记在第一个示例中使用new,这是第二个示例所必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42939182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档