栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

es6类只是javascript中原型模式的语法糖吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

es6类只是javascript中原型模式的语法糖吗?

是的,也许,但是一些语法糖有牙齿。

声明一个类将创建一个函数对象,该函数对象是该类的构造函数,并使用

constructor
在类主体内提供的代码以及与该类同名的命名类。

类构造函数具有一个普通的原型对象,类实例以常规的Javascript方式从该对象继承属性。在类主体中定义的实例方法将添加到此原型中。

ES6没有提供在类体内声明要存储在原型上并继承的类实例默认属性值(即,不是方法的值)的方法。要初始化实例值,可以将它们设置为构造函数内的局部非继承属性,也可以

prototype
按照与普通构造函数相同的方式,将它们手动添加到类定义之外的类构造函数的对象中。(我不是在争论为Javascript类设置继承属性的优点或其他问题)。

在类主体中声明的静态方法将添加为类构造函数的属性。避免使用静态类的方法名称与继承了标准功能属性和方法竞争

Function.prototype
,例如
call
apply
length

不太麻烦的是,类声明和方法始终在严格模式下执行,并且该功能很少引起注意:

.prototype
类构造函数的属性是只读的:您无法将其设置为为某些特殊功能而创建的其他对象目的。

扩展类时会发生一些有趣的事情:

  • prototype
    扩展类构造函数的object属性自动在
    prototype
    要扩展的类的对象上原型化。这并不是特别新颖,可以使用来复制效果
    Object.create

  • 扩展类的构造函数(对象)会自动原型化在要扩展的类的构造函数上,而不是

    Function
    。尽管使用
    Object.setPrototypeOf
    甚至可以复制对普通构造函数的影响
    childClass.__proto__ = parentClass
    ,但这将是一种非常不寻常的编码实践,并且在Javascript文档中经常建议不要这样做。

还有其他区别,例如,类对象未按使用

function
关键字声明的命名函数的方式进行吊起。

我认为认为类声明和表达式在所有将来的ECMA
script版本中保持不变不会太天真,并且看看是否以及何时进行开发会很有趣。可以说,将“语法糖”与ES6(ECMA-262标准版本6)中引入的类相关联已经成为一种时尚,但是我个人试图避免重复它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/575264.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号