我在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现在问题就在这里
是真的有区别,还是仅仅是口味上的差异,我用哪种方法来创建新的对象?
编辑
为了澄清这一点,我将在下面提出一些问题。
问题:
class方式吗?如果不支持,那么哪些浏览器不受支持?发布于 2017-03-21 22:23:45
引用MDN
在JavaScript2015中引入的JavaScript类比ECMAScript现有的基于原型的继承更具有语法优势。
而且上面写着
类语法没有在JavaScript中引入新的面向对象继承模型。
我认为考虑到这一点,我们可以说这只是口味的不同,至少取决于
ECMAScript 2015 (第6版,ECMA-262)
发布于 2017-03-21 22:30:23
我发现的一个不同之处是,使用旧语法扩展内置类是不可能的,但我认为使用新语法是可能的。我不知道现在支持得有多好。这个问题的更多细节:扩展Javascript中的承诺。
发布于 2017-03-21 22:26:32
有一些不同之处,这不仅仅是品味的问题。两者之间最重要的区别是:您可以忘记在第一个示例中使用new,这是第二个示例所必需的。
https://stackoverflow.com/questions/42939182
复制相似问题