在玩完ES6之后,我真的开始喜欢可用的新语法和功能,但是我确实对类有疑问。
新的ES6类只是旧原型模式的语法糖吗?还是幕后还有更多事情要做?即:
class Thing {
//... classy stuff
doStuff(){}
}
vs:
var Thing = function() {
// ... setup stuff
};
Thing.prototype.doStuff = function() {}; // etc
是的,也许,但是一些语法糖有牙齿。
声明一个类将创建一个函数对象,该函数对象是该类的构造函数,并使用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)中引入的类相关联已经成为一种时尚,但是我个人试图避免重复它。
本文向大家介绍JavaScript设计模式之原型模式分析【ES5与ES6】,包括了JavaScript设计模式之原型模式分析【ES5与ES6】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript设计模式之原型模式。分享给大家供大家参考,具体如下: 从设计模式的角度讲,原型模式是用于创建对象的一种模式,若需要创建一个对象,一种方法是先指定其类型,然后通过类来创建这个对象,另一
本文向大家介绍详解es6超好用的语法糖Decorator,包括了详解es6超好用的语法糖Decorator的使用技巧和注意事项,需要的朋友参考一下 Decorator(修饰器/装饰器)是es6提出的语法糖,用于修改类的行为。不过目前主流浏览器都没有很好的支持,我们需要用babel来转换为浏览器能识别的语言。在这篇文章中将介绍decorator的基础用法和一些应用实例。 1.修饰类 (1) 基础用法
问题内容: 我正在参加本地社区大学的数据结构和算法课程,很有趣。该课程的教科书是Y. Daniel Liang的 Java编程简介,第10版 。这本书本身很扎实。 在处理中,Liang提到了Java的“可变长度”参数。他写道(第265页): Java将可变长度参数视为数组。您可以将数组或可变数量的参数传递给可变长度参数。当调用带有可变数量参数的方法时,Java创建一个数组并将参数传递给它。 一个例
主要内容:介绍,实现,Shape.java,Rectangle.java,Square.java,Circle.java,ShapeCache.java,PrototypePatternDemo.java原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的
亦称: 克隆、Clone、Prototype 意图 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。 问题 如果你有一个对象, 并希望生成与其完全相同的一个复制品, 你该如何实现呢? 首先, 你必须新建一个属于相同类的对象。 然后, 你必须遍历原始对象的所有成员变量, 并将成员变量值复制到新对象中。 不错! 但有个小问题。 并非所有对象都能通过这种方式进行复
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据