构造函数、ECMAscript(ES6)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数、ECMAscript(ES6)相关的知识,希望对你有一定的参考价值。

参考技术A 1,在很多面向对象语言中都有类的概念,但是在javascript(es5)中没有类。而我们可以通过构造函数来模拟一个类。

(1)构造函数的首字母要大写,可以通过在函数中的this为类设置属性和方法

(2)通过new关键字创建类的实例

(3)通过传参的方式,在实例化对象的时候为对象设置属性

(4)一个构造函数可以生成多个对象的实例

构造函数的缺点就是:同一个构造函数的对象实例之间无法共享属性或方法

2,(1)为了解决构造函数的对象实例之间无法共享属性的缺点,js提供了prototype属性。

(2)每一个构造函数都有一个prototype属性,这个属性指向一个原型对象,这个原型对象上的所有属性和方法都可以被这个构造函数的实例使用

二、ECMAscript

(1)ECMAscript简称ES6,是JavaScript的标准,我们经常说的ES5,ES6等等,可以称作JavaScript的版本

之前学过的所有JavaScript特性,都是基于ES5版本的

ES6已更名为ES2015,ES7等后续的版本,我们都可以统称为ES2015+。

(2)变量和常量

之前一直使用var定义变量,在ES6版本中,我们可以使用let定义变量;增加了块级作用域;不存在变量提升;不允许重复声明(多次重复声明会报错);

(3)常量

在ES6中,不仅有变量,还增加了常量的概念,我们用const声明常亮,一旦声明,它的值就不能再改变(不能重复赋值),但如果常量中存储的是一个对象,可以改变这个对象的属性

ECMAScript 2017:“13.2 创建函数对象”去了哪里(来自 ES5)?

【中文标题】ECMAScript 2017:“13.2 创建函数对象”去了哪里(来自 ES5)?【英文标题】:ECMAScript 2017: Where Did "13.2 Creating Function Objects" Go (from ES5)? 【发布时间】:2018-09-04 22:02:37 【问题描述】:

在 ECMA-262, version 5.x(又名 ECMAScript 5 | ES5)中,曾经有一个名为 Creating Function Objects 的 13.2 节。

我一直在搜索该标准的最新版本 ECMAScript 2017(又名 ECMAScript 8 | ES8),但找不到类似的描述。

ES8 中的第 14.1 节称为Function Definitions,与 ES5 中的第 13 节相同。就我所知。

他们是否删除了整块?我认为这是对定义新函数时实际发生的情况的非常有用的描述。

【问题讨论】:

14.1.20: Runtime Semantics: InstantiateFunctionObject + 14.1.21: Runtime Semantics: Evaluation @Andreas 谢谢。呃,他们让我们很难理解默认属性是如何创建和设置的。我专门寻找 .prototype 和 .constructor 属性,以及它们是如何形成的。 【参考方案1】:

由于函数对象和函数语法的种类越来越多,这点有所改变。

在 ES5 中我们有

10 Executable Code and Execution Contexts
     …
10.4 Establishing an Execution Context
       …
10.4.3 Entering Function Code
10.5 Declaration Binding Instantiation
10.6 Arguments Object
   …
13 Function Definition
     (syntax and evaluation of declarations and expressions)
13.1 Strict Mode Restrictions
13.2 Creating Function Objects
13.2.1 [[Call]]
13.2.2 [[Construct]]
13.2.3 The [[ThrowTypeError]] Function Object

在 ES8 中我们有

 9 Ordinary and Exotic Objects Behaviours
 9.1 Ordinary Object Internal Methods and Internal Slots
 9.2 ECMAScript Function Objects
 9.2.1 [[Call]] ( thisArgument, argumentsList )
 9.2.2 [[Construct]] ( argumentsList, newTarget )
 9.2.3 FunctionAllocate ( functionPrototype, strict, functionKind )
 9.2.4 FunctionInitialize ( F, kind, ParameterList, Body, Scope )
 9.2.5 FunctionCreate ( kind, ParameterList, Body, Scope, Strict [ , prototype ] )
 9.2.6 GeneratorFunctionCreate ( kind, ParameterList, Body, Scope, Strict )
       …  
14 ECMAScript Language: Functions and Classes
14.1 Function Definitions
        …
14.1.18 RS: EvaluateBody
14.1.19 RS: IteratorBindingInitialization
14.1.20 RS: InstantiateFunctionObject
14.1.21 RS: Evaluation
14.2 Arrow Function Definitions
        …
14.3 Method Definitions
        …
14.4 Generator Function Definitions
        …
14.5 Class Definitions
        …
14.6 Async Function Definitions
        …
14.7 Async Arrow Function Definitions
        …
     …

【讨论】:

以上是关于构造函数、ECMAscript(ES6)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript高级之构造函数和原型

探索 Class 底层原理

[ECMAScript] 举例说明你对es6的class的理解

ES6中的类

ES6中的类

面向对象1.7