We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
proxy (代理)对象属于 怪异对象,其基本内置方法有一部分由ECMAScript代码实现。每个 proxy 对象都有 [[ProxyHandler]] 内置插槽。[[ProxyHandler]] 值是一个对象,叫做 proxy 的 handler object 或者为 null。handler object 的方法(处理程序方法,见下表)可用于扩展 proxy 对象的一个或多个内部方法的实现。每个 proxy 对象也都有一个叫做 [[ProxyTarget]] 的内置插槽,其值要么是对象,要么是 null。该对象被称为该 proxy 的 target object(目标对象)。
调用 handler method 以提供代理对象内部方法的实现时,该 handler method 作为一个参数传给 proxy 的目标对象。proxy 的 handler object 不一定有对应每个基本内部方法的方法。如果 handler object 没有对应于内部捕获的方法,则在代理上调用内部方法将导致在代理的目标对象上调用相应的内部方法。
代理对象的 [[ProxyHandler]] 和 [[ProxyTarget]] 内置插槽在对象被创建并且通常不会被修改时初始化。一些代理对象的创建方式允许它们随后被销毁。当代理对象被销毁时,其 [[ProxyHandler]] 和 [[ProxyTarget]] 内置插槽被设为 null 导致对该代理对象的内部方法的后续调用引发 TypeError 异常。
因为代理对象允许由任意ECMAScript代码提供内部方法的实现,可以定义代理对象,其处理程序方法与 基本内部方法 中定义的不变量冲突。基本内部方法 中定义的一些内部方法不变量是基本的完整性不变量。这些不变量由本节指定的代理对象内部方法显式强制执行。ECMAScript实现必须在所有可能的不变冲突存在时都是健壮的。
在接下来的算法描述中,假设 O 为 ECMAScript 代理对象,P 是键值,V 是 ECMAScript语言值,Desc 是 属性描述符记录。
注意:强制执行以下不变量: 1. 如果目标对象属性是不可写的,不可配置的自身数据属性,则为属性报告的值必须与相应目标对象属性的值相同。 2. 如果对应的目标对象属性是一个不可配置的自身访问器属性,且其 [[Get]] 属性未定义,则为属性报告的值必须未定义。
注意 强制执行以下不变量: 1. [[Set]] 是布尔值 2. 如果相应的目标对象属性是不可写的,不可配置的自身数据属性,则无法将属性的值更改为与相应目标对象属性的值不同的值。 3. 如果相应的目标对象属性是不可配置的自身访问器属性且其 [[Set]] 未定义,则无法设置属性的值。
注意:如果Proxy 怪异对象的 [[ProxyTarget]] 内置插槽初始值是一个有 [[Call]] 内置方法的对象,那么该Proxy 怪异对象 仅具有 [[Call]] 内置方法。
注意:如果Proxy 怪异对象的 [[ProxyTarget]] 内置插槽初始值是一个有 [[Construct]] 内置方法的对象,那么该Proxy 怪异对象 仅具有 [[Construct]] 内置方法。
代理对象的 [[Construct]] 强制执行以下不变量:[[Construct]] 结果必须是对象
创建新的 proxy 对象
undefined
proxy
Proxy.prototype // undefined
null
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Proxy(代理)对象的内置方法和内置插槽
proxy (代理)对象属于 怪异对象,其基本内置方法有一部分由ECMAScript代码实现。每个 proxy 对象都有 [[ProxyHandler]] 内置插槽。[[ProxyHandler]] 值是一个对象,叫做 proxy 的 handler object 或者为 null。handler object 的方法(处理程序方法,见下表)可用于扩展 proxy 对象的一个或多个内部方法的实现。每个 proxy 对象也都有一个叫做 [[ProxyTarget]] 的内置插槽,其值要么是对象,要么是 null。该对象被称为该 proxy 的 target object(目标对象)。
Proxy Handler Methods(代理对象的处理程序方法)
调用 handler method 以提供代理对象内部方法的实现时,该 handler method 作为一个参数传给 proxy 的目标对象。proxy 的 handler object 不一定有对应每个基本内部方法的方法。如果 handler object 没有对应于内部捕获的方法,则在代理上调用内部方法将导致在代理的目标对象上调用相应的内部方法。
代理对象的 [[ProxyHandler]] 和 [[ProxyTarget]] 内置插槽在对象被创建并且通常不会被修改时初始化。一些代理对象的创建方式允许它们随后被销毁。当代理对象被销毁时,其 [[ProxyHandler]] 和 [[ProxyTarget]] 内置插槽被设为 null 导致对该代理对象的内部方法的后续调用引发 TypeError 异常。
因为代理对象允许由任意ECMAScript代码提供内部方法的实现,可以定义代理对象,其处理程序方法与 基本内部方法 中定义的不变量冲突。基本内部方法 中定义的一些内部方法不变量是基本的完整性不变量。这些不变量由本节指定的代理对象内部方法显式强制执行。ECMAScript实现必须在所有可能的不变冲突存在时都是健壮的。
在接下来的算法描述中,假设 O 为 ECMAScript 代理对象,P 是键值,V 是 ECMAScript语言值,Desc 是 属性描述符记录。
[[GetPrototypeOf]] ( )
[[SetPrototypeOf]] ( V )
[[IsExtensible]] ( )
[[PreventExtensions]] ( )
[[GetOwnProperty]] ( P )
[[DefineOwnProperty]] ( P, Desc )
[[HasProperty]] ( P )
[[Get]] ( P, Receiver )
[[Set]] ( P, V, Receiver )
[[Delete]] ( P )
[[OwnPropertyKeys]] ( )
[[Call]] ( thisArgument, argumentsList )
[[Construct]] ( argumentsList, newTarget )
ProxyCreate ( target, handler )
Proxy对象(规范第26章,移到这边)
构造器
Proxy ( target, handler )
undefined
,抛 TypeError 异常Proxy构造器上的属性
proxy
怪异对象不需要初始化的 [[Prototype]] 内置插槽Proxy.revocable ( target, handler )
Proxy Revocation Functions
null
,返回undefined
null
null
null
undefined
The text was updated successfully, but these errors were encountered: