- fun 함수에 대한 참조를 반환합니다. 여기서 fun 🎜는 🎜obj1에 바인딩되고 🎜fun의 인수는 지정된 인수 🎜arg1, arg2, arg3,...에 바인딩됩니다. 🎜
🎜이제 🎜apply, 🎜call 및 🎜bind의 차이점이 분명해졌습니다. 🎜apply를 사용하면 인수를 배열과 같은 객체(예: 숫자 🎜length 속성과 그에 대응하는 음수가 아닌 정수 속성이 있는 객체)로 지정할 수 있습니다. 그리고 🎜call을 사용하면 함수의 매개변수를 직접 지정할 수 있습니다. 🎜apply 및 🎜call 모두 지정된 컨텍스트에서 지정된 매개변수를 사용하여 즉시 함수를 호출합니다. 반면, 바인딩은 지정된 this 값과 인수에 바인딩된 함수를 반환합니다. 이 반환된 함수에 대한 참조를 변수에 할당하여 캡처할 수 있으며, 그런 다음 언제든지 호출할 수 있습니다. 🎜
🎜
으아악
🎜🎜7. 🎜🎜🎜이벤트 핸들러 내부
요소의 이벤트 핸들러에 직접 함수를 할당하는 경우 이벤트 핸들러 함수 내에서 직접 this 来引用相应的元素。这种直接的函数分配可以使用 addeventListener 方法或通过 onclick와 같은 기존 이벤트 등록 방법을 사용하여 수행됩니다.
마찬가지로 )内使用 this와 같이 요소의 이벤트 속성을 직접 호출하면 해당 요소를 참조합니다.
단,
은 이벤트 핸들러나 이벤트 속성 내에서 호출되는 다른 함수를 통해 간접적으로 사용됩니다. this 会解析为全局对象 window
Microsoft의 이벤트 등록 모델 접근 방식
을 사용하여 이벤트 처리기에 함수를 연결하면 위와 동일한 동작을 얻을 수 있습니다. 이벤트 핸들러에 함수를 할당하는 대신(따라서 요소의 함수 메서드 생성) 이벤트에 대한 함수를 호출합니다(효과적으로 전역 컨텍스트에서 호출). attachEvent
GetThisEnvironment AO는 현재 실행 중인 실행 컨텍스트의 LexicalEnvironment를 조회하고 this 바인딩(예: HasThisBinding이 true 을 반환함)이 있는 가장 가까운 오름차순 환경 레코드를 찾습니다([[OuterEnv]] 속성을 반복하여). . 프로세스는 세 가지 환경 레코드 유형 중 하나로 끝납니다.
전역 환경 레코드의 [[GlobalThisValue]] 속성은 항상 globalThis(웹의 창를 통해 액세스할 수 있는 호스트 정의 전역 개체globalThis ( Web 上的 window,Node.js 上的 global로 설정됩니다. , Node.js 글로벌MDN 문서). InitializeHostDefinedRealm 단계에 따라 [[GlobalThisValue]] 속성이 생성되는 방법을 알아보세요.
호출된 함수가 구문상 기본 개체의 속성인 경우 해당 기본 개체는 호출의 "참조"가 되며, 일반적인 경우에는 this 的值。上面链接的评估步骤对此进行了解释;例如,在 refObj.func() (或 refObj["func"]())中,CallMemberExpression 是整个表达式 refObj.func(),它由 MemberExpressionrefObj.func 和 参数()this의 값이 됩니다. 위에 링크된 평가 단계는 이를 설명합니다. 예를 들어
으아악
🎜기본 참조 없음, 엄격 모드 및 🎜🎜with🎜🎜🎜
🎜기본 참조가 없는 호출은 일반적으로 속성으로 호출되지 않는 함수입니다. 예: 🎜
으아악
🎜이는 🎜메서드를 전달하거나 할당🎜할 때나 🎜쉼표 연산자🎜를 사용할 때도 발생합니다. 여기서는 참조 레코드와 값의 차이가 관련됩니다. 🎜
기능 j:按照规范,您会注意到j只能返回函数对象(Value)本身,而不能返回引用记录。因此,基本引用 refObj이 누락되었습니다.
참고: 5단계에서는 this 的实际值设置为严格模式下提供的 thisArgument - 在本例中为 undefined。在“草率模式”下,未定义或 null thisArgument 会导致 this의 실제 값을 엄격 모드에서 제공되는 thisArgument로 설정합니다. 이 경우에는 정의되지 않음입니다. "엉성한 모드"에서는 정의되지 않았거나 null
생성자, new 运算符将函数作为构造函数调用时,EvaluateNew 调用 Construct,它调用 [[Construct]] 方法。如果函数是基本构造函数(即不是 class extends...{...}),它会设置 thisArgument到从构造函数的原型创建的新对象。构造函数中 this 上设置的属性最终将出现在生成的实例对象上。 thisClass
다른 언어와 비교하여
this
关键字在 JavaScript 中的行为有所不同。在面向对象语言中,this
关键字指的是该类的当前实例。在 JavaScript 中,this
的值由函数的调用上下文 (context.function()
) 및 호출 위치가 결정됩니다. p>1. 글로벌 맥락에서 사용될 때
글로벌 맥락에서
을 사용하는 경우 으아아아this
时,它会绑定到全局对象(浏览器中的window
)전역 컨텍스트에 정의된 함수 내에서
this
时,this
를 사용하면 함수가 실제로 전역 컨텍스트의 메서드이기 때문에 여전히 전역 개체에 바인딩됩니다. 으아아아위의
으아아아f1
是一个全局对象的方法。因此我们也可以在window
개체에서 다음과 같이 호출하세요.2. 객체 메서드 내에서 사용되는 경우
객체 메소드 내에서
으아아아this
关键字时,this
를 사용하면 "직접" 둘러싸는 객체에 바인딩됩니다.위에서 "즉시"라는 단어를 큰따옴표로 묶었습니다. 이는 객체가 다른 객체 내에 중첩된 경우
으아아아this
가 직계 상위 객체에 바인딩된다는 것을 보여주기 위한 것입니다.객체에 명시적으로 메서드로 함수를 추가하더라도 위의 규칙을 따릅니다. 즉,
으아아아this
계속 상위 객체를 가리킵니다.3. 컨텍스트 프리 함수를 호출할 때
사용됨
으아아아this
时,它会绑定到全局对象(浏览器中的window
) 컨텍스트 없이(즉, 객체가 아닌) 함수 내에서 호출할 때(함수가 객체 내부에 정의된 경우에도).모든 기능을 사용해 보세요
함수를 사용하여 위 사항을 시도해 볼 수도 있습니다. 그러나 여전히 몇 가지 차이점이 있습니다.
this
를 사용하여 함수에 멤버를 추가할 수 있습니다. 그들을 지정합니다.new
연산자를 사용하여 인스턴스를 만들어야 할 수도 있습니다.아래에서는 Object와
으아아아this
를 사용하여 위에서 했던 모든 작업을 시도했지만 먼저 객체를 직접 작성하는 대신 함수를 만들었습니다.4. 생성자 내부에서 사용되는 경우 .
함수가 생성자로 사용되는 경우(즉,
new
关键字调用时),函数体内的this
키워드를 사용하여 호출되는 경우) 함수 본문의 는 생성되는 새 객체를 가리킵니다.으아아아 5. 프로토타입 체인에 정의된 함수 내에서 사용되는 경우
🎜메서드가 객체의 프로토타입 체인에 있는 경우, 메소드 내의
으아악this
는 마치 해당 객체에 메소드가 정의된 것처럼 메소드가 호출되는 객체를 참조합니다.6. 내부 호출(), 적용() 및 바인드() 함수
Function.prototype
에 정의되어 있습니다.this
값을 지정할 수 있습니다. 또한 호출 시 원래 함수에 인수를 전달할 수도 있습니다.fun.apply(obj1 [, argsArray])
将obj1
设置为this
内的值code>fun() 并调用fun()
,传递argsArray
fun.apply(obj1 [, argsArray])fun.call(obj1 [, arg1 [, arg2 [,arg3 [, ...]]]])
- 设置 obj1 作为fun()
内this
的值,并调用fun()
fun()을 호출합니다.argsArray
요소를 인수로 전달합니다.fun.bind(obj1 [, arg1 [, arg2 [,arg3 [, ...]]]])
- 返回对函数的引用fun
,其中 fun 内的this
绑定到obj1
,并且fun
的参数绑定到指定的参数arg1、arg2, arg3,...
- obj1 를apply
、call
和bind
之间的区别一定已经很明显了。apply
允许将参数指定为类似数组的对象,即具有数字length
属性和相应的非负整数属性的对象。而call
允许直接指定函数的参数。apply
和call
arg1, arg2, arg3, ...this
fun.bind(obj1 [, arg1 [, arg2 [,arg3 [, ...]]]])fun
함수에 대한 참조를 반환합니다. 여기서 fun 🎜는 🎜obj1에 바인딩되고 🎜fun의 인수는 지정된 인수 🎜arg1, arg2, arg3,...에 바인딩됩니다. 🎜 🎜이제 🎜apply, 🎜call 및 🎜bind의 차이점이 분명해졌습니다. 🎜apply를 사용하면 인수를 배열과 같은 객체(예: 숫자 🎜length 속성과 그에 대응하는 음수가 아닌 정수 속성이 있는 객체)로 지정할 수 있습니다. 그리고 🎜call을 사용하면 함수의 매개변수를 직접 지정할 수 있습니다. 🎜apply 및 🎜call 모두 지정된 컨텍스트에서 지정된 매개변수를 사용하여 즉시 함수를 호출합니다. 반면, 바인딩은 지정된 this 값과 인수에 바인딩된 함수를 반환합니다. 이 반환된 함수에 대한 참조를 변수에 할당하여 캡처할 수 있으며, 그런 다음 언제든지 호출할 수 있습니다. 🎜 🎜 으아악 🎜🎜7. 🎜🎜🎜이벤트 핸들러 내부this
来引用相应的元素。这种直接的函数分配可以使用addeventListener
方法或通过onclick
와 같은 기존 이벤트 등록 방법을 사용하여 수행됩니다.)内使用
this
와 같이 요소의 이벤트 속성을 직접 호출하면 해당 요소를 참조합니다.this
会解析为全局对象window
attachEvent
저는 JSFiddle을 추천합니다.中更好地尝试此操作> 으아아아
8.
화살표 함수에서this
ES6 화살표 함수는 공개 변수처럼 동작합니다. 즉, 어휘 범위에서 상속됩니다. 화살표 함수를 정의하는 함수의
가 됩니다.this
的行为类似于公共变量:它将从其词法范围继承。定义箭头函数的函数的this
将是箭头函数的this
는 화살표 함수의으아아아
아래 코드를 참조하세요: 🎜 으아아아此
은 실행 컨텍스트의 속성인 JavaScript의 키워드입니다. 주요 용도는 함수와 생성자입니다.this
규칙은 매우 간단합니다(모범 사례를 따르는 경우).기술 설명
this
은 사양서ECMAScript 표준definition
this
을 통한 추상 작업(약어: AO) ResolveThisBinding:전역 환경 기록, 모듈 환경 기록, 함수 환경 기록 각각에는 고유한 GetThisBinding 메서드가 있습니다.
GetThisEnvironment AO는 현재 실행 중인 실행 컨텍스트의 LexicalEnvironment를 조회하고 this 바인딩(예: HasThisBinding이 true 을 반환함)이 있는 가장 가까운 오름차순 환경 레코드를 찾습니다([[OuterEnv]] 속성을 반복하여). . 프로세스는 세 가지 환경 레코드 유형 중 하나로 끝납니다.
this
값은 일반적으로 코드가 엄격 모드인지 여부에 따라 달라집니다.GetThisBinding의 반환 값은 현재 실행 컨텍스트의
는 다른 값으로 확인됩니다. 이는 현재 실행 컨텍스트가 수정되는 경우에도 발생할 수 있습니다. 다음 하위 섹션에는 이러한 상황이 발생할 수 있는 5가지 시나리오가 나열되어 있습니다.this
值,因此每当建立新的执行上下文时,this
값을 반영하므로 새 실행 컨텍스트가 설정될 때마다코드 샘플을 AST Explorer
에 배치하여 사양 세부정보를 따를 수 있습니다.이것은 최상위 수준에서 평가되는 스크립트 코드입니다(예:
内:eval
调用通常类似于eval(
...);
或(eval)(
...); (或((eval))(
…);
등). 1 이것은 직접뿐입니다(호출 표현이 좁은 패턴을 따르는 경우). 2eval
调用涉及以任何其他方式调用函数引用eval
。它可以是eval?.(
...)
,(
..., eval)(
...),
,调用window.eval(
...)
,eval.call(
...,
...)给定 const aliasEval1 = eval; 等。 window.aliasEval2 = eval;
,也可以是aliasEval1(
…)
、aliasEval2(
…)
代码>.分别给出 const originalEval = eval; window.eval = (x) => originalEval(x);eval(
…)
도 간접적입니다.JavaScript에서 "(1, eval)('this') 대 eval('this')에 대한 chuckj의 답변을 확인하세요. 및 Dmitry Soshnikov의 ECMA-262-5 세부 정보 – 2장: 엄격 모드 (Archived)(간접
eval()
호출을 사용할 수 있는 경우).PerformEval은
인 LexicalEnvironment로 새로운eval
代码。它创建一个新的 声明性环境记录 作为其 LexicalEnvironment,这是 GetThisEnvironment 从中获取this
eval 코드를 실행합니다. 이는 GetThisEnvironment선언적 환경 레코드
그런 다음this
出现在eval
를 생성하여 > 값에서 this를 가져옵니다.가 코드에 있으면 GetThisEnvironment가 호출되고 해당 값이 반환됩니다.
선언적 환경 기록생성된
은- eval 호출이 직접인지 간접인지에 따라 달라집니다.
- 직접 평가에서는 현재 실행 중인 실행 컨텍스트어휘적 환경을 기준으로 평가합니다.
간접 평가에서는 [[GlobalEnv]] 속성(간접 평가를 수행하는 李>영역 레코드
의글로벌 환경 레코드
)을 기반으로 합니다. 🎜 🎜 🎜즉, 🎜this
值不会改变;它取自名为eval
의 어휘 범위입니다.this
值是全局对象 (globalThis
).新函数
怎么样? —new Function
与eval
비슷하지만 코드를 즉시 호출하지 않고 함수를 생성합니다. this 바인딩은 다음 하위 섹션에 설명된 대로 잘 작동하는 함수를 호출할 때를 제외하고는 여기 어디에도 적용되지 않습니다.4. function코드
를 입력하세요함수를 호출할 때 함수 코드를 입력하세요.
함수 호출에는 네 가지 범주의 구문이 있습니다.다음 세 가지- EvaluateCall AO에 대해 실행: 3
- 일반 함수 호출
- 선택적 체인콜
- 태그 템플릿
그리고 이에 대해 - EvaluateNew을 실행합니다. 3
- 생성자 호출
실제 함수 호출은Call AO에서 발생하며, 이는 thisValue를 사용하여 호출 컨텍스트에 따라 결정됩니다. 이 매개변수는 호출과 관련된 긴 호출 목록에 전달됩니다. Call은 함수의 [[Call]] 내부 슬롯을 호출합니다. 이는 새로운 기능 환경 기록이 생성된 PrepareForOrdinaryCall을 호출합니다.
또한 함수 환경 레코드에는 [[ThisValue]] 필드도 있습니다.NewFunctionEnvironment 호출은 함수 환경의 [[ThisBindingStatus]] 속성도 설정합니다.
[[Call]]은 OrdinaryCallBindThis도 호출합니다. 여기서 적절한 thisArgument는 다음을 기준으로 결정됩니다.
확인 후 새로 생성된 함수 환경 레코드의 BindThisValue 메서드가 최종적으로 호출되어 실제로 thisArgument에 추가할 [[ThisValue]] 필드를 설정합니다.
마지막으로 이 필드는 기능 환경 레코드입니다. GetThisBinding AO는 다음 위치에서
this
값을 가져옵니다.다시 말하지만, this의 가치에 대한 정확한 결정은 여러 요인에 따라 달라집니다. 이는 단지 일반적인 개요일 뿐입니다. 이러한 기술적 배경을 바탕으로 구체적인 예를 모두 살펴보겠습니다.
화살표 기능
화살표 함수를 계산할 때 OrdinaryFunctionCreate에서 [[ThisMode]] 내부 슬롯 함수 개체의 속성이 "어휘적"으로 설정됩니다. p>
OrdinaryCallBindThis에는 F 함수가 필요합니다:
이는 나머지 알고리즘 바인딩 this을 건너뛰었음을 의미합니다. 화살표 함수는 자체 this 값을 바인딩하지 않습니다.
그렇다면 화살표 함수에서
this
는 무엇일까요? ResolveThisBinding 및 GetThisEnvironment을 검토하기 위해 HasThisBinding 메서드는 명시적으로 false를 반환합니다.그래서 우리는 외부 환경을 반복적으로 찾습니다. 프로세스는 this 바인딩을 사용하는 세 가지 환경 중 하나에서 종료됩니다.
이것은 단지 화살표 함수 본문에서
this
가 화살표 함수의 어휘 범위 에서 나온다는 것을 의미합니다. 즉, (화살표 함수 대 함수 선언/표현식: 동등/가환적입니까? ):함수속성
일반 함수(
에 따라 결정됩니다.function
, 메서드function
、方法),this
) , 는 함수의 호출 방법으아아아
또는: 🎜으아악다음 함수 호출 중 하나에서
func
内的this
值将为refObj
. 1refObj.func()
refObj["func"]()
refObj?.func()
refObj.func?.()
refObj.func``
호출된 함수가 구문상 기본 개체의 속성인 경우 해당 기본 개체는 호출의 "참조"가 되며, 일반적인 경우에는
(또는this
的值。上面链接的评估步骤对此进行了解释;例如,在refObj.func()
(或refObj["func"]()
)中,CallMemberExpression 是整个表达式refObj.func()
,它由 MemberExpressionrefObj.func
和 参数()
this의 값이 됩니다. 위에 링크된 평가 단계는 이를 설명합니다. 예를 들어)에서
refObj.func
和refObj
CallMemberExpression은 전체 표현식입니다.- 는
MemberExpression-
- refObj.func 및
parameters
refObj.func
作为值是可调用的函数对象;相应的引用用于确定this
().게다가
다 표현이에요,?.()
之前、``
는 세 가지 역할을 수행합니다. 代码>모두 참고자료이고 그들은 모두 가치입니다.
또는refObj.func
时为refObj
;或foo.bar
code> 当应用于foo.bar.baz
바인딩. 선택적 링크 및 태그 템플릿 예제는 매우 유사하게 작동합니다. 기본적으로 참조 앞에는()이 옵니다.
EvaluateCallthis
。简单属性不会影响执行上下文,例如这里,this
은 IsPropertyReference
는 이 [[Base]] 속성을 가져와을 사용하여 구문적으로 개체의 속성인지 확인합니다. 참조의 [[Base]] 속성을 얻으려고 시도합니다(예: 에 적용되는 경우). 속성으로 작성하면
GetThisValuethis
값으로 사용합니다.참고: 전역 범위에서 에 관해 Getters/Setters가 작동하는 방식:
으아악 🎜기본 참조 없음, 엄격 모드 및 🎜🎜with🎜🎜🎜 🎜기본 참조가 없는 호출은 일반적으로 속성으로 호출되지 않는 함수입니다. 예: 🎜 으아악 🎜이는 🎜메서드를 전달하거나 할당🎜할 때나 🎜쉼표 연산자🎜를 사용할 때도 발생합니다. 여기서는 참조 레코드와 값의 차이가 관련됩니다. 🎜기능
으아아아j
:按照规范,您会注意到j
只能返回函数对象(Value)本身,而不能返回引用记录。因此,基本引用refObj
이 누락되었습니다.EvaluateCall은 calls을 호출합니다. 여기서 thisValue는 undefine입니다. 이는 OrdinaryCallBindThis에서 다릅니다(F: 함수 개체; thisArgument: thisValue가 Call에 전달됨):
참고: 5단계에서는
thisArgumentthis
的实际值设置为严格模式下提供的 thisArgument - 在本例中为undefined
。在“草率模式”下,未定义或 null thisArgument 会导致this
의 실제 값을 엄격 모드에서 제공되는 thisArgument로 설정합니다. 이 경우에는정의되지 않음
입니다. "엉성한 모드"에서는 정의되지 않았거나 null로 인해 가 전역 this 값이 됩니다. IsPropertyReference
가false를 반환하는 경우 EvaluateCall은 다음 단계를 수행합니다. 이것은 정의되지 않았습니다. thisValue 다음에서 올 수 있습니다: refEnv sec-with-statement-runtime-semantics-evaluation" rel="noreferrer"> 문의
을 제외하고 항상undefine입니다. . 이 경우
가 바인딩 개체가 됩니다.Symbol.unscopables
(MDN 上的文档)来控制with
thisValue
(Symbol.unscopables
바인딩 동작을 제어하기 위한 MDN 문서
으아아아this
). 지금까지 요약하자면:그리고: 으아아아
.call
,.apply
,.bind
계산할 때 일반적인 함수가 정의된 위치는 중요하지 않습니다.
,.call
.apply
,.bind
, thisArg 및 원시 OrdinaryCallBindThis🎜 5단계의 또 다른 결과는 6.2단계(사양의)와는 달리 원래 🎜this🎜 값이 "엉성한" 모드🎜에만 🎜 개체로 캐스팅된다는 것입니다. 🎜이를 확인하기 위해 this 값의 또 다른 소스를 소개하겠습니다. this 바인딩을 재정의하는 세 가지 메서드: 4
Function.prototype.apply(thisArg, argArray)
Function.prototype.
{调用
,绑定
}(thisArg, ...args)
李>
즉시 함수를 호출하고.bind
.bind
创建一个绑定函数,其this 绑定已设置为 thisArg 并且无法再次更改。.call
和.apply
는 this 바인딩이 thisArg로 설정되고 다시 변경할 수 없는 바인딩 함수를 만듭니다..call
및.apply
this
에 직접 매핑됩니다. 지정된.call
和.apply
直接映射到 Call ,使用指定的thisArg。.bind
가 thisArg에 바인딩되도록 설정합니다..call
및.apply
는 CallthisArg을 사용하세요.
를 사용하여 바인딩된 함수를 만듭니다. 그들은 함수 객체의 [[BoundThis]] 내부 슬롯을 찾는 자체.bind
BoundFunctionCreate[[Call ]] 메소드
를 가지고 있습니다.this
Object("s")
或new String("s")
값 설정 예: 으아아아 객체의 경우 이는 strict 모드와 non-strict 모드에서 동일합니다.이제 원시 값을 제공해 보세요.
비엄격 모드에서는 기본 요소가 개체 래퍼 형식으로 강제됩니다.this
으아아아를 호출할 때 얻는 것과 동일한 개체 유형입니다. 엄격 모드에서는 기본 요소를 사용할 수 있습니다. 으아아아
으아아아新
jQuery와 같은 이러한 방법을 사용하는 라이브러리는 여기에서 선택한 DOM 요소를 설정합니다.생성자,
및 🎜🎜🎜🎜 🎜new
运算符将函数作为构造函数调用时,EvaluateNew 调用 Construct,它调用 [[Construct]] 方法。如果函数是基本构造函数(即不是class extends
...{
...}
),它会设置 thisArgument到从构造函数的原型创建的新对象。构造函数中this
上设置的属性最终将出现在生成的实例对象上。this
Classnew
연산자를 사용하여 함수를 생성자로 호출할 때 EvaluateNew는 Construct🎜를 호출하고 [[구성]] 메서드 🎜. 함수가 기본 생성자(즉,클래스 확장
...{
...}
가 아님)인 경우 🎜thisArgument🎜를 다음으로 설정합니다. 생성자의 프로토타입에 의해 생성된 새 객체의 값입니다. 생성자의 🎜에 설정된 속성은 결국 생성된 인스턴스 개체에 나타납니다. 🎜는 기본이 아닌 값을 명시적으로 반환하지 않는 한 암시적으로 반환됩니다. 🎜
으아악class
은 ECMAScript 2015에 도입된 생성자를 생성하는 새로운 방법입니다.클래스 정의는 암시적으로 엄격 모드에 있습니다.
으아악超级
H4>new
行为的例外是class extends
...{
...}
,如上所述。派生类在调用时不会立即设置其 this 值;它们只有在通过一系列super
调用到达基类后才会这样做(在没有自己的构造函数
的情况下隐式发生)。不允许在调用super
之前使用this
.super
super
调用具有调用的词法范围(函数环境记录)的 this 值的超级构造函数。 GetThisValue 对于super
调用有一个特殊的规则。它使用 BindThisValue 将this
를 호출하면 호출의 어휘 범위(함수 환경 레코드)에서값을 사용하여 수퍼 생성자를 호출합니다. GetThisValue
super
호출에는 특별한 규칙이 있습니다. BindThisValue를 사용하여
를 해당 환경 레코드로 설정합니다.으아악
가 수정됩니다. 각class
5. 평가등급 분야 ECMAScript 2022에는 인스턴스 필드와 정적 필드가 도입되었습니다. 평가할 때 , ClassDefinitionEvaluation이 실행되어 실행 실행 컨텍스트this
this
#x
필드가 정적이 아닌 경우Private 필드(예: ) 및 메서드가 Private 환경에 추가됩니다.
정적 블록this
은 현재
입니다. 정적 블록은 정적 필드 및 메서드와 동일한 방식으로 작동합니다. 내부의 🎜는 클래스 자체를 나타냅니다. 🎜 🎜메서드 및 getter/setter에서 🎜는 일반 함수 속성과 동일하게 작동합니다. 🎜으아아아this
TC39 3단계 제안1:
(o.f)()
等价于o.f()
;(f)()
相当于f()
. 이 2성 기사(보관됨). 특히 괄호로 묶인 표현을 평가하는 방법을 참조하세요.2: MemberExpression em>이어야 하며 속성이 될 수 없으며 정확히 "eval"이 포함된 [[ReferencedName]]이 있어야 하며 %eval% 내장 개체여야 합니다.
3: 사양에 " ref 를 X 평가의 결과 로 놔두세요"라고 명시되어 있을 때마다 X는 평가 단계를 찾아야 하는 표현식입니다. 예를 들어 MemberExpression 또는 CallExpression을 평가하는 것은 이러한 알고리즘입니다. 그 중 일부는 참조 레코드를 생성합니다.
4: this 값, 특히
MDNArray.prototype.map
,Array.prototype.forEach
등을 제공할 수 있는 여러 가지 다른 기본 및 호스트 메서드가 있습니다.Array.prototype.map
、Array.prototype.forEach 等接受 thisArg 作为第二个参数。任何人都可以创建自己的方法来更改this
,例如(func, thisArg) => func.bind(thisArg)
、(func, thisArg) => func。 call(thisArg)
thisArg를 두 번째 매개변수로 허용합니다. 누구든지(func, thisArg) => func.bind(thisArg)
,(func, thisArg) => func와 같은 자신만의 메소드를 만들어
을 변경할 수 있습니다. call(thisArg) 등 언제나 그렇듯이은 훌륭한 서비스 문서를 제공합니다.
재미로 몇 가지 예를 통해 이해도를 테스트해 보세요
의 값은 무엇인가요? 왜this
각 코드 조각에 대해 다음 질문에 답하세요. "표시된 줄에 있는.인가요?"
답변을 보려면 회색 상자를 클릭하세요.