必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

但并不存在于实际的必威:,绑定语法

2019-09-30 05:59 来源:未知

JavaScript 深刻之从 ECMAScript 标准解读 this

2017/05/17 · JavaScript · this

原稿出处: 冴羽   

以前都以基于函数的行使状态来精晓this,分为种种情况:

最先的文章出处

JavaScript深切之从ECMAScript典型解读this
ECMA-262-3 in detail. Chapter 3. This
ECMAScript5.1中文版
ECMAScript5.1英文版

世家好,作者是IT修真院费城分院第06期学员,一枚正直善良的web技术员。

1. “::” 操作符

this绑定语法,提供了一种新的操作符::,用于举行便捷的this绑定。

要害有以下二种用法:
(1)串联

import { map, takeWhile, forEach } from "iterlib";

getPlayers()
::map(x => x.character())
::takeWhile(x => x.strength > 100)
::forEach(x => console.log(x));

(2)单独使用

Promise.resolve(123).then(::console.log);

独立行使时,::前边总得是x.yx[y]super.xsuper[x]的形式,
不然会报Syntax Error,以下语法则则表达了那或多或少。

BindExpression :
<i>    </i>:: MemberExpression

  • It is a Syntax Error if the derived MemberExpression is not
    MemberExpression : MemberExpression . Identifier,
    MemberExpression : MemberExpression [ Expression ],
    or SuperProperty
  • It is a Syntax Error if the derived NewExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of NewExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.

<u></u>

SuperProperty :
super [ Expression ]
super . IdentifierName


前言

在《JavaScript深切之实践上下文栈》中讲到,当JavaScript代码推行一段可推行代码(executable code)时,会创设对应的推行上下文(execution context)。

对此各个试行上下文,都有多个关键性质

  • 变量对象(Variable object,VO)
  • 功能域链(Scope chain)
  • this

明日首要讲讲this,然则倒霉讲。

……

因为大家要从ECMASciript5专门的学问起来提及。

先奉上ECMAScript 5.1正式地点:

英文版:

中文版:

让大家开首询问标准吧!

  • 1、作为对象方法调用
  • 2、作为日常函数调用
  • 3、构造器调用
  • 4、Function.prototype.call或Function.prototype.apply调用
    唯独明天看来了一篇文章,是追根溯源的从 ECMASciript 标准教学 this 的针对性,读完感到获得相当的大,赶紧记录下来。

Types


率先是第 8 章 Types:

Types are further subclassified into ECMAScript language types and specification types.

An ECMAScript language type corresponds to values that are directly manipulated by an ECMAScript programmer using the ECMAScript language. The ECMAScript language types are Undefined, Null, Boolean, String, Number, and Object.

A specification type corresponds to meta-values that are used within algorithms to describe the semantics of ECMAScript language constructs and ECMAScript language types. The specification types are Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, and Environment Record.

咱俩大致的翻译一下:

ECMAScript 的门类分为语言类型和职业类型。

ECMAScript 语言类型是开拓者间接接纳 ECMAScript 能够操作的。其实就是我们常说的Undefined, Null, Boolean, String, Number, 和 Object。

而标准类型也便是 meta-values,是用来用算法描述 ECMAScript 语言结交涉ECMAScript 语言类型的。规范类型富含:Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, 和 Environment Record。

没懂?无妨,我们假设精晓在 ECMAScript 规范中还大概有一种只设有夏梅规中的类型,它们的法力是用来描述语言底层行为逻辑

明日给大家大饱眼福一下,修真院官方网站JS职务中或然会动用到的知识点:

2. The Reference Specification Type

The Reference Specification Type,是二个语言职行业内部置的品种(ECMAScript Specification Types)。

Reference Specification Type饱含二种值,ReferenceSuper Reference
(1)Reference是一种数据结构,富含base valuereferenced name
以及strict reference flag四个组成都部队分。

(2)Super Reference,多了二个thisValue字段,
用来拍卖super()以及super.method()调用进程。

The base value component is either undefined, an Object, a Boolean, a String, a Symbol, a Number, or an Environment Record.
The referenced name component is a String or Symbol value.

与之相关联有多少个函数,下文少禽用到:
(1)GetBase(V)会回去八个Reference的base value

(2)GetValue用于获取词法遭逢中绑定的值,或许目的的属性值。

必威 1

(3)GetThisValue,对于Reference则返回base value
不然对于Super Reference则赶回它的thisValue字段。

必威 2


Types

第一是第8章Types:

Types are further subclassified into ECMAScript language types and specification types.

An ECMAScript language type corresponds to values that are directly manipulated by an ECMAScript programmer using the ECMAScript language. The ECMAScript language types are Undefined, Null, Boolean, String, Number, and Object.

A specification type corresponds to meta-values that are used within algorithms to describe the semantics of ECMAScript language constructs and ECMAScript language types. The specification types are Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, and Environment Record.

我们简要的翻译一下:

ECMAScript的花色分为语言类型和正式类型。

ECMAScript语言类型是开采者直接行使ECMAScript能够操作的。其实正是我们常说的Undefined, Null, Boolean, String, Number, 和 Object。

而专门的学问类型相当于meta-values,是用来用算法描述ECMAScript语言结商谈ECMAScript语言类型的。标准类型包罗:Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, 和 Environment Record。

没懂?无妨,大家珍惜看里面包车型地铁Reference类型。

摸底标准

英文版:http://es5.github.io/#x15.1
中文版:http://yanhaijing.com/es5/#115

Reference


那怎样又是 Reference ?

让大家看 8.7 章 The Reference Specification Type

The Reference type is used to explain the behaviour of such operators as delete, typeof, and the assignment operators.

所以 Reference 类型正是用来讲授诸如 delete、typeof 以及赋值等操作行为的。

抄袭尤雨溪大大的话,就是:

那边的 Reference 是一个 Specification Type,也正是“只设有陈岚式里的指雁为羹类型”。它们是为着越来越好地描述语言的底层行为逻辑才存在的,但并空中楼阁于实际的 js 代码中

再看接下去的这段具体介绍 Reference 的剧情:

A Reference is a resolved name binding.

A Reference consists of three components, the base value, the referenced name and the Boolean valued strict reference flag.

The base value is either undefined, an Object, a Boolean, a String, a Number, or an environment record (10.2.1).

A base value of undefined indicates that the reference could not be resolved to a binding. The referenced name is a String.

这段叙述了 Reference 的结缘,由七个组成都部队分,分别是:

  1. base value: 正是性质所在的靶子可能就是EnvironmentRecord,它的值只大概是 undefined, an Object, a Boolean, a String。

  2. referenced name: 正是性质的称谓。

  3. strict reference: 是还是不是处在严谨格局。

举个例证:

var foo = 1;

// 对应的Reference是:
var fooReference = {
    base: EnvironmentRecord,
    name: 'foo',
    strict: false
};

再举个例证:

var foo = {
    bar: function () {
        return this;
    }
};

foo.bar(); // foo

// bar对应的Reference是:
var BarReference = {
    base: foo,
    propertyName: 'bar',
    strict: false
};

还要专门的学业中还提供了获得 Reference 组成部分的主意,比方 GetBase 和 IsPropertyReference
那七个艺术很简短,轻松看一看:

1.GetBase

GetBase(V). Returns the base value component of the reference V.

返回 reference 的 base value

  1. IsPropertyReference

IsPropertyReference(V). Returns true if either the base value is an object or HasPrimitiveBase(V) is true; otherwise returns false.

简短的精晓:假若 base value 是叁个对象,就回去true

简述Js中this的指向


2. 绑定法则

TAG标签:
版权声明:本文由必威发布于必威-前端,转载请注明出处:但并不存在于实际的必威:,绑定语法