diff options
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/proxy/handler')
14 files changed, 0 insertions, 2001 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/apply/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/apply/index.html deleted file mode 100644 index 62b8b67f5f..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/apply/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: handler.apply() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply -tags: - - ECMAScript6 - - JavaScript - - Method - - Proxy -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply ---- -<div>{{JSRef}}</div> - -<p><strong><code>handler.apply()</code></strong> 方法用于拦截函数的调用。</p> - -<div>{{EmbedInteractiveExample("pages/js/proxyhandler-apply.html", "taller")}}</div> - -<p class="hidden">此交互式示例的源代码存储在GitHub存储库中。 如果您想为交互式示例项目做出贡献,请克隆 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> 并向我们发起拉取请求</p> - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - apply: function(target, thisArg, argumentsList) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>以下是传递给apply方法的参数,<code>this上下文绑定在</code>handler对象上.</p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象(函数)。</dd> - <dt><code>thisArg</code></dt> - <dd>被调用时的上下文对象。</dd> - <dt><code>argumentsList</code></dt> - <dd>被调用时的参数数组。</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>apply方法可以返回任何值。</code></p> - -<h2 id="描述">描述</h2> - -<p><strong><code>handler.apply</code></strong> 方法用于拦截函数的调用。</p> - -<h3 id="拦截">拦截</h3> - -<p>该方法会拦截目标对象的以下操作:</p> - -<ul> - <li><code>proxy(...args)</code></li> - <li>{{jsxref("Function.prototype.apply()")}} 和 {{jsxref("Function.prototype.call()")}}</li> - <li>{{jsxref("Reflect.apply()")}}</li> -</ul> - -<h3 id="约束">约束</h3> - -<p>如果违反了以下约束,代理将抛出一个TypeError:</p> - -<p><code>target</code>必须是可被调用的。也就是说,它必须是一个函数对象。</p> - -<h2 id="示例">示例</h2> - -<p>以下代码演示如何捕获函数的调用。</p> - -<pre class="brush: js">var p = new Proxy(function() {}, { - apply: function(target, thisArg, argumentsList) { - console.log('called: ' + argumentsList.join(', ')); - return argumentsList[0] + argumentsList[1] + argumentsList[2]; - } -}); - -console.log(p(1, 2, 3)); // "called: 1, 2, 3" - // 6 -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td> </td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - -<div> -<div class="hidden">此页面上的兼容性表格由结构化数据生成。 如果您想为数据做出贡献,请检出 <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> 并向我们发出拉取请求。</div> - -<p>{{Compat("javascript.builtins.Proxy.handler.apply")}}</p> -</div> - -<h2 id="另见">另见</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Function.prototype.apply")}}</li> - <li>{{jsxref("Function.prototype.call")}}</li> - <li>{{jsxref("Reflect.apply()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/construct/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/construct/index.html deleted file mode 100644 index 209e9752e3..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/construct/index.html +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: handler.construct() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/construct -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct ---- -<div>{{JSRef}}</div> - -<p><code><strong>handler.construct()</strong></code> 方法用于拦截{{jsxref("Operators/new", "new")}} 操作符. 为了使new操作符在生成的Proxy对象上生效,用于初始化代理的目标对象自身必须具有[[Construct]]内部方法(即 <code>new target</code> 必须是有效的)。</p> - -<p>{{EmbedInteractiveExample("pages/js/proxyhandler-construct.html", "taller")}}</p> - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - construct: function(target, argumentsList, newTarget) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>下面的参数将会传递给<code>construct</code>方法,<code>this</code>绑定在handler上。</p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象。</dd> - <dt><code>argumentsList</code></dt> - <dd>constructor的参数列表。</dd> - <dt><code>newTarget</code></dt> - <dd>最初被调用的构造函数,就上面的例子而言是p。</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>construct</code> 方法必须返回一个对象。</p> - -<h2 id="描述">描述</h2> - -<p><code><strong>handler.construct()</strong></code> 方法用于拦截 {{jsxref("Operators/new", "new")}}操作符。</p> - -<h3 id="拦截">拦截</h3> - -<p>该拦截器可以拦截以下操作:</p> - -<ul> - <li><code>new proxy(...args)</code></li> - <li>{{jsxref("Reflect.construct()")}}</li> -</ul> - -<h3 id="约束">约束</h3> - -<p>如果违反以下约定,代理将会抛出错误 {{jsxref("TypeError")}}:</p> - -<ul> - <li>必须返回一个对象.</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>下面代码演示如何拦截 {{jsxref("Operators/new", "new")}} 操作。</p> - -<pre class="brush: js">var p = new Proxy(function() {}, { - construct: function(target, argumentsList, newTarget) { - console.log('called: ' + argumentsList.join(', ')); - return { value: argumentsList[0] * 10 }; - } -}); - -console.log(new p(1).value); // "called: 1" - // 10 -</pre> - -<p>下面的代码违反了约定.</p> - -<pre class="brush: js">var p = new Proxy(function() {}, { - construct: function(target, argumentsList, newTarget) { - return 1; - } -}); - -new p(); // TypeError is thrown -</pre> - -<p>下面的代码未能正确的初始化Proxy。Proxy初始化时,传给它的<code>target</code> 必须具有一个有效的constructor供<code>new</code>操作符调用。</p> - -<pre class="brush: js">var p = new Proxy({}, { - construct: function(target, argumentsList, newTarget) { - return {}; - } -}); - -new p(); // TypeError is thrown, "p" is not a constructor -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td> </td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - -<div>{{Compat("javascript.builtins.Proxy.handler.construct")}}</div> - -<div id="compat-mobile"> </div> - -<h2 id="相关主题">相关主题</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Operators/new", "new")}} operator.</li> - <li>{{jsxref("Reflect.construct()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/defineproperty/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/defineproperty/index.html deleted file mode 100644 index 9912e043a0..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/defineproperty/index.html +++ /dev/null @@ -1,181 +0,0 @@ ---- -title: handler.defineProperty() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty ---- -<div>{{JSRef}}</div> - -<p><strong><code>handler.defineProperty()</code></strong> 用于拦截对对象的 {{jsxref("Object.defineProperty()")}} 操作。</p> - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - defineProperty: function(target, property, descriptor) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>下列参数将会被传递给 <code>defineProperty</code> 方法。<code> this</code> 绑定在 handler 对象上。</p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象。</dd> - <dt><code>property</code></dt> - <dd>待检索其描述的属性名。</dd> - <dt><code>descriptor</code></dt> - <dd>待定义或修改的属性的描述符。</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>defineProperty</code> 方法必须以一个 {{jsxref("Boolean")}} 返回,表示定义该属性的操作成功与否。</p> - -<h2 id="描述">描述</h2> - -<p><code><strong>handler.defineProperty()</strong></code> 用于拦截对对象的 {{jsxref("Object.defineProperty()")}} 操作。</p> - -<h3 id="拦截">拦截</h3> - -<p>该方法会拦截目标对象的以下操作 :</p> - -<ul> - <li>{{jsxref("Object.defineProperty()")}}</li> - <li>{{jsxref("Reflect.defineProperty()")}}</li> - <li>{{jsxref("proxy.property='value'")}}</li> -</ul> - -<h3 id="不变量">不变量</h3> - -<p>如果违背了以下的不变量,proxy会抛出 {{jsxref("TypeError")}}:</p> - -<ul> - <li>如果目标对象不可扩展, 将不能添加属性。</li> - <li>不能添加或者修改一个属性为不可配置的,如果它不作为一个目标对象的不可配置的属性存在的话。</li> - <li>如果目标对象存在一个对应的可配置属性,这个属性可能不会是不可配置的。</li> - <li>如果一个属性在目标对象中存在对应的属性,那么 <code>Object.defineProperty(target, prop, descriptor)</code> 将不会抛出异常。</li> - <li>在严格模式下, <code>false</code> 作为<code> handler.defineProperty</code> 方法的返回值的话将会抛出 {{jsxref("TypeError")}} 异常.</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>以下代码演示如何拦截对目标对象的 {{jsxref("Object.defineProperty()")}} 操作。</p> - -<pre class="brush: js">var p = new Proxy({}, { - defineProperty: function(target, prop, descriptor) { - console.log('called: ' + prop); - return true; - } -}); - -var desc = { configurable: true, enumerable: true, value: 10 }; -Object.defineProperty(p, 'a', desc); // "called: a" -</pre> - -<p>当调用 {{jsxref("Object.defineProperty()")}} 或者 {{jsxref("Reflect.defineProperty()")}},传递给 <code>defineProperty</code> 的 <code>descriptor</code> 有一个限制 - 只有以下属性才有用,非标准的属性将会被无视 :</p> - -<ul> - <li><code>enumerable</code></li> - <li><code>configurable</code></li> - <li><code>writable</code></li> - <li><code>value</code></li> - <li><code>get</code></li> - <li><code>set</code></li> -</ul> - -<pre class="brush: js">var p = new Proxy({}, { - defineProperty(target, prop, descriptor) { - console.log(descriptor); - return Reflect.defineProperty(target, prop, descriptor); - } -}); - -Object.defineProperty(p, 'name', { - value: 'proxy', - type: 'custom' -}); // { value: 'proxy' } -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - -<div>{{CompatibilityTable}}</div> - -<div id="compat-desktop"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Chrome</th> - <th>Firefox (Gecko)</th> - <th>Internet Explorer</th> - <th>Opera</th> - <th>Safari</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoDesktop("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Android</th> - <th>Chrome for Android</th> - <th>Firefox Mobile (Gecko)</th> - <th>IE Mobile</th> - <th>Opera Mobile</th> - <th>Safari Mobile</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoMobile("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<h2 id="另见">另见</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Object.defineProperty()")}}</li> - <li>{{jsxref("Reflect.defineProperty()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html deleted file mode 100644 index 6cb4255755..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: handler.deleteProperty() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty ---- -<div>{{JSRef}}</div> - -<p><strong><code>handler.deleteProperty()</code></strong> 方法用于拦截对对象属性的 {{jsxref("Operators/delete", "delete")}} 操作。</p> - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - deleteProperty: function(target, property) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p><code>deleteProperty</code> 方法将会接受以下参数。 <code>this</code> 被绑定在 handler上。</p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象。</dd> - <dt><code>property</code></dt> - <dd>待删除的属性名。</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>deleteProperty</code> 必须返回一个 {{jsxref("Boolean")}} 类型的值,表示了该属性是否被成功删除。</p> - -<h2 id="描述">描述</h2> - -<p><code><strong>handler.deleteProperty()</strong></code> 方法可以拦截 {{jsxref("Operators/delete", "delete")}} 操作。</p> - -<h3 id="拦截">拦截</h3> - -<p>该方法会拦截以下操作:</p> - -<ul> - <li>删除属性: <code>delete proxy[foo]</code> 和 <code>delete proxy.foo</code></li> - <li>{{jsxref("Reflect.deleteProperty()")}}</li> -</ul> - -<h3 id="不变量">不变量</h3> - -<p>如果违背了以下不变量,proxy 将会抛出一个 {{jsxref("TypeError")}}:</p> - -<ul> - <li>如果目标对象的属性是不可配置的,那么该属性不能被删除。</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>以下代码演示了对 {{jsxref("Operators/delete", "delete")}} 操作的拦截。</p> - -<pre class="brush: js">var p = new Proxy({}, { - deleteProperty: function(target, prop) { - console.log('called: ' + prop); - return true; - } -}); - -delete p.a; // "called: a" -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td> </td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - -<div>{{CompatibilityTable}}</div> - -<div id="compat-desktop"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Chrome</th> - <th>Firefox (Gecko)</th> - <th>Internet Explorer</th> - <th>Opera</th> - <th>Safari</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoDesktop("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Android</th> - <th>Chrome for Android</th> - <th>Firefox Mobile (Gecko)</th> - <th>IE Mobile</th> - <th>Opera Mobile</th> - <th>Safari Mobile</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoMobile("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<h2 id="另见">另见</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Operators/delete", "delete")}} 操作符</li> - <li>{{jsxref("Reflect.deleteProperty()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/get/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/get/index.html deleted file mode 100644 index 14a350436a..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/get/index.html +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: handler.get() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/get -tags: - - ECMAScript6 - - JavaScript - - Method - - Proxy -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get ---- -<div>{{JSRef}}</div> - -<p><strong><code>handler.get()</code></strong> 方法用于拦截对象的读取属性操作。</p> - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - get: function(target, property, receiver) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>以下是传递给get方法的参数,<code>this上下文绑定在</code>handler对象上.</p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象。</dd> - <dt><code>property</code></dt> - <dd>被获取的属性名。</dd> - <dt><code>receiver</code></dt> - <dd>Proxy或者继承Proxy的对象</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p>get方法可以返回任何值。</p> - -<h2 id="描述">描述</h2> - -<p><strong><code>handler.get</code></strong> 方法用于拦截对象的读取属性操作。</p> - -<h3 id="拦截">拦截</h3> - -<p>该方法会拦截目标对象的以下操作:</p> - -<ul> - <li>访问属性: <code>proxy[foo]和</code> <code>proxy.bar</code></li> - <li>访问原型链上的属性: <code>Object.create(proxy)[foo]</code></li> - <li>{{jsxref("Reflect.get()")}}</li> -</ul> - -<h3 id="约束">约束</h3> - -<p>如果违背了以下的约束,proxy会抛出 {{jsxref("TypeError")}}:</p> - -<ul> - <li>如果要访问的目标属性是不可写以及不可配置的,则返回的值必须与该目标属性的值相同。</li> - <li>如果要访问的目标属性没有配置访问方法,即get方法是undefined的,则返回值必须为undefined。</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>以下代码演示如何拦截属性值的读取操作。</p> - -<pre class="brush: js">var p = new Proxy({}, { - get: function(target, prop, receiver) { - console.log("called: " + prop); - return 10; - } -}); - -console.log(p.a); // "called: a" - // 10 -</pre> - -<p>以下代码演示违反约束的情况。</p> - -<pre class="brush: js">var obj = {}; -Object.defineProperty(obj, "a", { - configurable: false, - enumerable: false, - value: 10, - writable: false -}); - -var p = new Proxy(obj, { - get: function(target, prop) { - return 20; - } -}); - -p.a; //会抛出TypeError -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td> </td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - -<div>{{CompatibilityTable}}</div> - -<div id="compat-desktop"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Chrome</th> - <th>Firefox (Gecko)</th> - <th>Internet Explorer</th> - <th>Opera</th> - <th>Safari</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoDesktop("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Android</th> - <th>Chrome for Android</th> - <th>Firefox Mobile (Gecko)</th> - <th>IE Mobile</th> - <th>Opera Mobile</th> - <th>Safari Mobile</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoMobile("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<h2 id="另见">另见</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Reflect.get()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/getownpropertydescriptor/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/getownpropertydescriptor/index.html deleted file mode 100644 index 470b2c6ad9..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/getownpropertydescriptor/index.html +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: handler.getOwnPropertyDescriptor() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor ---- -<div>{{JSRef}}</div> - -<p><strong><code>handler.getOwnPropertyDescriptor()</code></strong> 方法是 {{jsxref("Object.getOwnPropertyDescriptor()")}} 的钩子。</p> - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - getOwnPropertyDescriptor: function(target, prop) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p><code>下列参数会被传入 getOwnPropertyDescriptor</code> 方法中。这是绑定到handler上。 </p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象。</dd> - <dt><code>prop</code></dt> - <dd>返回属性名称的描述。</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>getOwnPropertyDescriptor</code> 方法必须返回一个 object 或 <code>undefined</code>。</p> - -<h2 id="描述">描述</h2> - -<p><code><strong>handler.getOwnPropertyDescriptor()</strong></code> 方法是 {{jsxref("Object.getOwnPropertyDescriptor()")}} 的陷阱。</p> - -<h3 id="拦截">拦截</h3> - -<p>这个陷阱可以拦截这些操作:</p> - -<ul> - <li>{{jsxref("Object.getOwnPropertyDescriptor()")}}</li> - <li>{{jsxref("Reflect.getOwnPropertyDescriptor()")}}</li> -</ul> - -<h3 id="不变量">不变量</h3> - -<p>如果下列不变量被违反,代理将抛出一个 {{jsxref("TypeError")}}:</p> - -<ul> - <li><code>getOwnPropertyDescriptor</code> 必须返回一个 object 或 <code>undefined</code>。</li> - <li>如果属性作为目标对象的不可配置的属性存在,则该属性无法报告为不存在。</li> - <li>如果属性作为目标对象的属性存在,并且目标对象不可扩展,则该属性无法报告为不存在。</li> - <li>如果属性不存在作为目标对象的属性,并且目标对象不可扩展,则不能将其报告为存在。</li> - <li>属性不能被报告为不可配置,如果它不作为目标对象的自身属性存在,或者作为目标对象的可配置的属性存在。</li> - <li>Object.getOwnPropertyDescriptor(target)的结果可以使用 Object.defineProperty 应用于目标对象,也不会抛出异常。</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>以下是 {{jsxref("Object.getOwnPropertyDescriptor()")}} 的代码陷阱:</p> - -<pre class="brush: js">var p = new Proxy({ a: 20}, { - getOwnPropertyDescriptor: function(target, prop) { - console.log('called: ' + prop); - return { configurable: true, enumerable: true, value: 10 }; - } -}); - -console.log(Object.getOwnPropertyDescriptor(p, 'a').value); // "called: a" - // 10 -</pre> - -<p>以下代码则违反了不变量。</p> - -<pre class="brush: js">var obj = { a: 10 }; -Object.preventExtensions(obj); -var p = new Proxy(obj, { - getOwnPropertyDescriptor: function(target, prop) { - return undefined; - } -}); - -Object.getOwnPropertyDescriptor(p, 'a'); // TypeError is thrown -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - -<div>{{CompatibilityTable}}</div> - -<div id="compat-desktop"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Chrome</th> - <th>Firefox (Gecko)</th> - <th>Internet Explorer</th> - <th>Opera</th> - <th>Safari</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoDesktop("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Android</th> - <th>Chrome for Android</th> - <th>Firefox Mobile (Gecko)</th> - <th>IE Mobile</th> - <th>Opera Mobile</th> - <th>Safari Mobile</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoMobile("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<h2 id="相关链接">相关链接</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Object.getOwnPropertyDescriptor()")}}</li> - <li>{{jsxref("Reflect.getOwnPropertyDescriptor()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/getprototypeof/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/getprototypeof/index.html deleted file mode 100644 index 215d2d9646..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/getprototypeof/index.html +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: handler.getPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf -tags: - - ECMAScript 2015 - - JavaScript - - Method - - Proxy - - 方法 -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf ---- -<div>{{JSRef("Global_Objects", "Proxy")}}</div> - -<p><strong><code>handler.getPrototypeOf()</code></strong> 是一个代理(Proxy)方法,当读取代理对象的原型时,该方法就会被调用。</p> - -<div>{{EmbedInteractiveExample("pages/js/proxyhandler-getprototypeof.html", "taller")}}</div> - - - -<h2 id="语法">语法</h2> - -<pre class="brush: js">const <var>p</var> = new Proxy(<var>obj</var>, { - getPrototypeOf(<var>target</var>) { - ... - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>当 <code>getPrototypeOf</code> 方法被调用时,<code>this</code> 指向的是它所属的处理器对象。</p> - -<dl> - <dt><code>target</code></dt> - <dd>被代理的目标对象。</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>getPrototypeOf</code> 方法的返回值必须是一个对象或者 <code>null</code>。</p> - -<h2 id="描述">描述</h2> - -<p>在 JavaScript 中,下面这五种操作(方法/属性/运算符)可以触发 JS 引擎读取一个对象的原型,也就是可以触发 <code>getPrototypeOf()</code> 代理方法的运行:</p> - -<ul> - <li>{{jsxref("Object.getPrototypeOf()")}}</li> - <li>{{jsxref("Reflect.getPrototypeOf()")}}</li> - <li>{{jsxref("Object/proto", "__proto__")}}</li> - <li>{{jsxref("Object.prototype.isPrototypeOf()")}}</li> - <li>{{jsxref("Operators/instanceof", "instanceof")}}</li> -</ul> - -<p>如果遇到了下面两种情况,JS 引擎会抛出 {{jsxref("TypeError")}} 异常:</p> - -<ul> - <li><code>getPrototypeOf()</code> 方法返回的不是对象也不是 <code>null。</code></li> - <li>目标对象是不可扩展的,且 <code>getPrototypeOf()</code> 方法返回的原型不是目标对象本身的原型。</li> -</ul> - -<h2 id="示例">示例</h2> - -<h3 id="基本用法">基本用法</h3> - -<pre class="brush: js">var obj = {}; -var proto = {}; -var handler = { - getPrototypeOf(target) { - console.log(target === obj); // true - console.log(this === handler); // true - return proto; - } -}; - -var p = new Proxy(obj, handler); -console.log(Object.getPrototypeOf(p) === proto); // true -</pre> - -<h3 id="5_种触发_getPrototypeOf_代理方法的方式">5 种触发 getPrototypeOf 代理方法的方式</h3> - -<pre class="brush: js">var obj = {}; -var p = new Proxy(obj, { - getPrototypeOf(target) { - return Array.prototype; - } -}); -console.log( - Object.getPrototypeOf(p) === Array.prototype, // true - Reflect.getPrototypeOf(p) === Array.prototype, // true - p.__proto__ === Array.prototype, // true - Array.prototype.isPrototypeOf(p), // true - p instanceof Array // true -); -</pre> - -<h3 id="两种情况下的异常">两种情况下的异常</h3> - -<pre class="brush: js">var obj = {}; -var p = new Proxy(obj, { - getPrototypeOf(target) { - return "foo"; - } -}); -Object.getPrototypeOf(p); // TypeError: "foo" is not an object or null - -var obj = Object.preventExtensions({}); -var p = new Proxy(obj, { - getPrototypeOf(target) { - return {}; - } -}); -Object.getPrototypeOf(p); // TypeError: expected same prototype value -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">规范</th> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}</td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - - - -<p>{{Compat("javascript.builtins.Proxy.handler.getPrototypeOf")}}</p> - -<h2 id="参见">参见</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Object.getPrototypeOf()")}}</li> - <li>{{jsxref("Reflect.getPrototypeOf()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/has/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/has/index.html deleted file mode 100644 index fead0846ff..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/has/index.html +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: handler.has() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/has -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has ---- -<div>{{JSRef}}</div> - -<p> <strong><code>handler.has()</code></strong> 方法是针对 {{jsxref("Operators/in", "in")}} 操作符的代理方法。</p> - - - - - -<p>{{EmbedInteractiveExample("pages/js/proxyhandler-has.html", "taller")}}</p> - - - - - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - has: function(target, prop) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p><code>下面是传递给 has</code> 方法的参数. <code>this</code> is bound to the handler.</p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象.</dd> - <dt><code>prop</code></dt> - <dd>需要检查是否存在的属性.</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>has</code> 方法返回一个 boolean 属性的值.</p> - -<h2 id="描述">描述</h2> - -<p><code><strong>handler.has</strong></code> 方法可以看作是针对 {{jsxref("Operators/in", "in")}} 操作的钩子.</p> - -<h3 id="拦截">拦截</h3> - -<p>这个钩子可以拦截下面这些操作:</p> - -<ul> - <li>属性查询: <code>foo in proxy</code></li> - <li>继承属性查询: <code>foo in Object.create(proxy)</code></li> - <li><code>with</code> 检查<code>: with(proxy) { (foo); }</code></li> - <li>{{jsxref("Reflect.has()")}}</li> -</ul> - -<h3 id="约束">约束</h3> - -<p>如果违反了下面这些规则, proxy 将会抛出 {{jsxref("TypeError")}}:</p> - -<ul> - <li>如果目标对象的某一属性本身不可被配置,则该属性不能够被代理隐藏.</li> - <li>如果目标对象为不可扩展对象,则该对象的属性不能够被代理隐藏</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>下面的代码拦截了 {{jsxref("Operators/in", "in")}} 操作符.</p> - -<pre class="brush: js">var p = new Proxy({}, { - has: function(target, prop) { - console.log('called: ' + prop); - return true; - } -}); - -console.log('a' in p); // "called: a" - // true -</pre> - -<p>下面的代码违反了约束.</p> - -<pre class="brush: js">var obj = { a: 10 }; -Object.preventExtensions(obj); -var p = new Proxy(obj, { - has: function(target, prop) { - return false; - } -}); - -'a' in p; // TypeError is thrown -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="浏览器支持">浏览器支持</h2> - -<div>{{CompatibilityTable}}</div> - -<div id="compat-desktop"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Chrome</th> - <th>Firefox (Gecko)</th> - <th>Internet Explorer</th> - <th>Opera</th> - <th>Safari</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoDesktop("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Android</th> - <th>Chrome for Android</th> - <th>Firefox Mobile (Gecko)</th> - <th>IE Mobile</th> - <th>Opera Mobile</th> - <th>Safari Mobile</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoMobile("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<h2 id="其他">其他</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Operators/in", "in")}} operator</li> - <li>{{jsxref("Reflect.has()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/index.html deleted file mode 100644 index 26d1ad3517..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Proxy handler -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler -tags: - - ECMAScript 2015 - - JavaScript - - Proxy -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy -translation_of_original: Web/JavaScript/Reference/Global_Objects/Proxy/handler ---- -<div>{{JSRef}}</div> - -<div>Proxy 的 handler 对象是一个占位符对象,它包含了用于 {{jsxref("Proxy")}} 的陷阱(Trap)函数。</div> - -<div>此处可以理解为由Proxy所暴露出的钩子函数,handler作为挂载钩子函数的对象存在,不同的操作会触发不同的钩子函数</div> - -<div>,handler提供了覆写钩子函数的方法。</div> - -<h2 id="方法">方法</h2> - -<p>所有的陷阱是可选的。如果某个陷阱没有定义,那么就会保留默认行为。</p> - -<dl> - <dt>{{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}</dt> - <dd>在读取代理对象的原型时触发该操作,比如在执行 <code>{{jsxref("Object.getPrototypeOf")}}(proxy)</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}</dt> - <dd>在设置代理对象的原型时触发该操作,比如在执行 <code>{{jsxref("Object.setPrototypeOf")}}(proxy, null)</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/isExtensible", "handler.isExtensible()")}}</dt> - <dd>在判断一个代理对象是否是可扩展时触发该操作,比如在执行 <code>{{jsxref("Object.isExtensible")}}(proxy)</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}</dt> - <dd>在让一个代理对象不可扩展时触发该操作,比如在执行 <code>{{jsxref("Object.preventExtensions")}}(proxy)</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}</dt> - <dd>在获取代理对象某个属性的属性描述时触发该操作,比如在执行 <code>{{jsxref("Object.getOwnPropertyDescriptor")}}(proxy, "foo")</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/defineProperty", "handler.defineProperty()")}}</dt> - <dd>在定义代理对象某个属性时的属性描述时触发该操作,比如在执行 <code>{{jsxref("Object.defineProperty")}}(proxy, "foo", {})</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/has", "handler.has()")}}</dt> - <dd>在判断代理对象是否拥有某个属性时触发该操作,比如在执行 <code>"foo" {{jsxref("Operators/in", "in")}} proxy</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/get", "handler.get()")}}</dt> - <dd>在读取代理对象的某个属性时触发该操作,比如在执行 <code>proxy.foo</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/set", "handler.set()")}}</dt> - <dd>在给代理对象的某个属性赋值时触发该操作,比如在执行 <code>proxy.foo = 1</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}</dt> - <dd>在删除代理对象的某个属性时触发该操作,即使用 {{jsxref("Operators/delete", "delete")}} 运算符,比如在执行 <code>delete proxy.foo</code> 时。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/ownKeys", "handler.ownKeys()")}}</dt> - <dd>{{jsxref("Object.getOwnPropertyNames")}} 和{{jsxref("Object.getOwnPropertySymbols")}} 的陷阱。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/apply", "handler.apply()")}}</dt> - <dd>函数调用操作的陷阱。</dd> - <dt>{{jsxref("Global_Objects/Proxy/handler/construct", "handler.construct()")}}</dt> - <dd>{{jsxref("Operators/new", "new")}} 运算符的陷阱。</dd> -</dl> - -<p>一些不标准的陷阱已经<a href="/zh-CN/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#Proxy">废弃并且被移除了</a></p> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">规范</th> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}</td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - - - -<p>{{Compat("javascript.builtins.Proxy.handler")}}</p> - -<h2 id="相关链接">相关链接</h2> - -<ul> - <li>{{JSxRef("Proxy")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/isextensible/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/isextensible/index.html deleted file mode 100644 index 7be418197f..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/isextensible/index.html +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: handler.isExtensible() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible -tags: - - ECMAScript 2015 - - JavaScript - - Method - - Proxy -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible ---- -<div>{{JSRef}}<br> -<strong>handler.isExtensible() </strong>方法用于拦截对对象的Object.isExtensible()。</div> - -<div> -<p>{{EmbedInteractiveExample("pages/js/proxyhandler-isextensible.html", "taller")}}</p> -</div> - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - isExtensible: function(target) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>下列参数将会被传递给 <code>isExtensible</code>方法。 this 绑定在 handler 对象上。</p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象。</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>isExtensible</code>方法必须返回一个 Boolean值或可转换成Boolean的值。</p> - -<h2 id="描述">描述</h2> - -<p>handler.isExtensible()用于拦截对对象的Object.isExtensible()。</p> - -<h3 id="拦截">拦截</h3> - -<p>该方法会拦截目标对象的以下操作:</p> - -<ul> - <li>{{jsxref("Object.isExtensible()")}}</li> - <li>{{jsxref("Reflect.isExtensible()")}}</li> -</ul> - -<h3 id="约束">约束</h3> - -<p>如果违背了以下的约束,proxy会抛出 TypeError:</p> - -<ul> - <li><code>Object.isExtensible(proxy)</code> 必须同<code>Object.isExtensible(target)</code>返回相同值。也就是必须返回true或者为true的值,返回false和为false的值都会报错。</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>以下代码演示{{jsxref("Object.isExtensible()")}}.</p> - -<pre class="brush: js">var p = new Proxy({}, { - isExtensible: function(target) { - console.log('called'); - return true;//也可以return 1;等表示为true的值 - } -}); - -console.log(Object.isExtensible(p)); // "called" - // true -</pre> - -<p>以下代码演示违反约束的情况。</p> - -<pre class="brush: js">var p = new Proxy({}, { - isExtensible: function(target) { - return false;//return 0;return NaN等都会报错 - } -}); - -Object.isExtensible(p); // TypeError is thrown -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - -<div> - - -<p>{{Compat("javascript.builtins.Proxy.handler.isExtensible")}}</p> -</div> - -<h2 id="另见">另见</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Object.isExtensible()")}}</li> - <li>{{jsxref("Reflect.isExtensible()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/ownkeys/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/ownkeys/index.html deleted file mode 100644 index 956b908375..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/ownkeys/index.html +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: handler.ownKeys() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/ownKeys -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys ---- -<div>{{JSRef}}</div> - -<p><strong><code>handler.ownKeys()</code></strong> 方法用于拦截 {{jsxref("Reflect.ownKeys()")}}.</p> - - - -<p>{{EmbedInteractiveExample("pages/js/proxyhandler-ownkeys.html", "taller")}}</p> - - - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - ownKeys: function(target) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>下面的参数被传递给<code>ownKeys。this</code>被绑定在<code>handler上。</code></p> - -<dl> - <dt><code>target</code></dt> - <dd>目标对象.</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>ownKeys</code> 方法必须返回一个可枚举对象.</p> - -<h2 id="描述">描述</h2> - -<p><code><strong>handler.ownKeys()</strong></code> 方法用于拦截 {{jsxref("Reflect.ownKeys()")}}.</p> - -<h3 id="拦截">拦截</h3> - -<p>该拦截器可以拦截以下操作::</p> - -<ul> - <li>{{jsxref("Object.getOwnPropertyNames()")}}</li> - <li>{{jsxref("Object.getOwnPropertySymbols()")}}</li> - <li>{{jsxref("Object.keys()")}}</li> - <li>{{jsxref("Reflect.ownKeys()")}}</li> -</ul> - -<h3 id="约束">约束</h3> - -<p>如果违反了下面的约束,proxy将抛出错误 {{jsxref("TypeError")}}:</p> - -<ul> - <li><code>ownKeys</code> 的结果必须是一个数组.</li> - <li>数组的元素类型要么是一个 {{jsxref("String")}} ,要么是一个 {{jsxref("Symbol")}}.</li> - <li>结果列表必须包含目标对象的所有不可配置(non-configurable )、自有(own)属性的key.</li> - <li>如果目标对象不可扩展,那么结果列表必须包含目标对象的所有自有(own)属性的key,不能有其它值.</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>下面的代码拦截 {{jsxref("Object.getOwnPropertyNames()")}}.</p> - -<pre class="brush: js">var p = new Proxy({}, { - ownKeys: function(target) { - console.log('called'); - return ['a', 'b', 'c']; - } -}); - -console.log(Object.getOwnPropertyNames(p)); // "called" - // [ 'a', 'b', 'c' ]</pre> - -<p>下面的代码违反了约定</p> - -<pre class="brush: js example-bad">var obj = {}; -Object.defineProperty(obj, 'a', { - configurable: false, - enumerable: true, - value: 10 } -); - -var p = new Proxy(obj, { - ownKeys: function(target) { - return [123, 12.5, true, false, undefined, null, {}, []]; - } -}); - -console.log(Object.getOwnPropertyNames(p)); - -// TypeError: proxy [[OwnPropertyKeys]] 必须返回一个数组 -// 数组元素类型只能是String或Symbol -</pre> - -<h2 id="标准">标准</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容">浏览器兼容</h2> - -<div>{{CompatibilityTable}}</div> - -<div id="compat-desktop"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Chrome</th> - <th>Firefox (Gecko)</th> - <th>Internet Explorer</th> - <th>Opera</th> - <th>Safari</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoDesktop("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table"> - <tbody> - <tr> - <th>Feature</th> - <th>Android</th> - <th>Chrome for Android</th> - <th>Firefox Mobile (Gecko)</th> - <th>IE Mobile</th> - <th>Opera Mobile</th> - <th>Safari Mobile</th> - </tr> - <tr> - <td>Basic support</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatGeckoMobile("18")}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - <td>{{CompatUnknown}}</td> - </tr> - </tbody> -</table> -</div> - -<h2 id="兼容性注意事项">兼容性注意事项</h2> - -<h3 id="Firefox火狐">Firefox火狐</h3> - -<ul> - <li>在Gecko 42 {{geckoRelease(42)}}版本中, <code>ownKey</code> 的实施已经更新了,为了反映最终的ES5标准 (see {{bug(1049662)}}): - - <ul> - <li>现在需要检查结果是不是数组以及数组元素类型是不是string或symbol.</li> - <li>枚举重复的自有的属性名称不再失败.</li> - </ul> - </li> -</ul> - -<h2 id="另见">另见</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Object.getOwnPropertyNames()")}}</li> - <li>{{jsxref("Reflect.ownKeys()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/preventextensions/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/preventextensions/index.html deleted file mode 100644 index dd6823c9dd..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/preventextensions/index.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: handler.preventExtensions() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/preventExtensions -tags: - - Proxy 代理 拦截 -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions ---- -<div>{{JSRef}}</div> - -<p><strong><code>handler.preventExtensions()</code></strong> 方法用于设置对{{jsxref("Object.preventExtensions()")}}的拦截</p> - -<p>{{EmbedInteractiveExample("pages/js/proxyhandler-preventextensions.html", "taller")}}</p> - -<h2 id="语法">语法</h2> - -<pre class="brush: js notranslate">var p = new Proxy(target, { - preventExtensions: function(target) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>以下参数传递给 <code>preventExtensions</code> 方法. 它会绑定到这个handler.</p> - -<dl> - <dt><code>target</code></dt> - <dd>所要拦截的目标对象.</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>preventExtensions</code> 方法返回一个布尔值.</p> - -<h2 id="描述">描述</h2> - -<p><code><strong>handler.preventExtensions()</strong></code> 拦截 {{jsxref("Object.preventExtensions()")}}返回一个布尔值.</p> - -<h3 id="拦截">拦截</h3> - -<p>这个trap可以拦截这些操作:</p> - -<ul> - <li>{{jsxref("Object.preventExtensions()")}}</li> - <li>{{jsxref("Reflect.preventExtensions()")}}</li> -</ul> - -<h3 id="约束">约束</h3> - -<p>如果违反了下列规则, proxy则会抛出一个 {{jsxref("TypeError")}}:</p> - -<ul> - <li>如果目标对象是可扩展的,那么只能返回 <code>false</code></li> -</ul> - -<h2 id="示例">示例</h2> - -<p>以下代码演示了如何拦截{{jsxref("Object.preventExtensions()")}}。</p> - -<pre class="brush: js notranslate">var p = new Proxy({}, { - preventExtensions: function(target) { - console.log('called'); - Object.preventExtensions(target); - return true; - } -}); - -console.log(Object.preventExtensions(p)); // "called" - // false -</pre> - -<p>以下代码违反了约束.</p> - -<pre class="brush: js notranslate">var p = new Proxy({}, { - preventExtensions: function(target) { - return true; - } -}); - -Object.preventExtensions(p); // 抛出类型错误 -</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - -<div> - - -<p>{{Compat("javascript.builtins.Proxy.handler.preventExtensions")}}</p> -</div> - -<h2 id="参考">参考</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Object.preventExtensions()")}}</li> - <li>{{jsxref("Reflect.preventExtensions()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/set/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/set/index.html deleted file mode 100644 index c66481647a..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/set/index.html +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: handler.set() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/set -tags: - - ECMAScript6 - - JavaScript - - Method - - Proxy - - Proxy拦截 -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set ---- -<div>{{JSRef}}</div> - -<p><code><strong>handler.set()</strong></code> 方法是设置属性值操作的捕获器。</p> - -<div>{{EmbedInteractiveExample("pages/js/proxyhandler-set.html", "taller")}}</div> - - - -<h2 id="语法">语法</h2> - -<pre class="syntaxbox">const <var>p</var> = new Proxy(<var>target</var>, { - set: function(<var>target</var>, <var>property</var>, <var>value</var>, <var>receiver</var>) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>以下是传递给 <code>set()</code> 方法的参数。<code>this</code> 绑定在 handler 对象上。</p> - -<dl> - <dt><code><var>target</var></code></dt> - <dd>目标对象。</dd> - <dt><code><var>property</var></code></dt> - <dd>将被设置的属性名或 {{jsxref("Symbol")}}。</dd> - <dt><code><var>value</var></code></dt> - <dd>新属性值。</dd> - <dt><code><var>receiver</var></code></dt> - <dd>最初被调用的对象。通常是 proxy 本身,但 handler 的 set 方法也有可能在原型链上,或以其他方式被间接地调用(因此不一定是 proxy 本身)。 - <div class="note"> - <p><strong>比如:</strong>假设有一段代码执行 <code>obj.name = "jen"</code>, <code><var>obj</var></code> 不是一个 proxy,且自身不含 <code>name</code> 属性,但是它的原型链上有一个 proxy,那么,那个 proxy 的 <code>set()</code> 处理器会被调用,而此时,<code><var>obj</var></code> 会作为 receiver 参数传进来。</p> - </div> - </dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p><code>set()</code> 方法应当返回一个布尔值。</p> - -<ul> - <li>返回 <code>true</code> 代表属性设置成功。</li> - <li>在严格模式下,如果 <code>set()</code> 方法返回 <code>false</code>,那么会抛出一个 {{jsxref("TypeError")}} 异常。</li> -</ul> - -<h2 id="描述">描述</h2> - -<p><code>handler.set()</code> 方法用于拦截设置属性值的操作。</p> - -<h3 id="拦截">拦截</h3> - -<p>该方法会拦截目标对象的以下操作:</p> - -<ul> - <li>指定属性值:<code>proxy[foo] = bar</code> 和 <code>proxy.foo = bar</code></li> - <li>指定继承者的属性值:<code>Object.create(proxy)[foo] = bar</code></li> - <li>{{jsxref("Reflect.set()")}}</li> -</ul> - -<h3 id="约束">约束</h3> - -<p>如果违背以下的约束条件,proxy 会抛出一个 {{jsxref("TypeError")}} 异常:</p> - -<ul> - <li>若目标属性是一个不可写及不可配置的数据属性,则不能改变它的值。</li> - <li>如果目标属性没有配置存储方法,即 <code>[[Set]]</code> 属性的是 <code>undefined</code>,则不能设置它的值。</li> - <li>在严格模式下,如果 <code>set()</code> 方法返回 <code>false</code>,那么也会抛出一个 {{jsxref("TypeError")}} 异常。</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>以下代码演示如何捕获属性的设置操作。</p> - -<pre class="brush: js">var p = new Proxy({}, { - set: function(target, prop, value, receiver) { - target[prop] = value; - console.log('property set: ' + prop + ' = ' + value); - return true; - } -}) - -console.log('a' in p); // false - -p.a = 10; // "property set: a = 10" -console.log('a' in p); // true -console.log(p.a); // 10</pre> - -<h2 id="规范">规范</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">规范</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}</td> - </tr> - </tbody> -</table> - -<h2 id="浏览器兼容性">浏览器兼容性</h2> - - - -<p>{{Compat("javascript.builtins.Proxy.handler.set")}}</p> - -<h2 id="另见">另见</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Reflect.set()")}}</li> -</ul> diff --git a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/setprototypeof/index.html b/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/setprototypeof/index.html deleted file mode 100644 index 9d88cd2593..0000000000 --- a/files/zh-cn/web/javascript/reference/global_objects/proxy/handler/setprototypeof/index.html +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: handler.setPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/setPrototypeOf -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf ---- -<div>{{JSRef}}</div> - -<p><strong><code>handler.setPrototypeOf()</code></strong> 方法主要用来拦截 {{jsxref("Object.setPrototypeOf()")}}.</p> - -<h2 id="语法">语法</h2> - -<pre class="brush: js">var p = new Proxy(target, { - setPrototypeOf: function(target, prototype) { - } -}); -</pre> - -<h3 id="参数">参数</h3> - -<p>以下参数传递给 <code>setPrototypeOf</code> 方法. </p> - -<dl> - <dt><code>target</code></dt> - <dd>被拦截目标对象.</dd> - <dt><code>prototype</code></dt> - <dd>对象新原型或为<code>null</code>.</dd> -</dl> - -<h3 id="返回值">返回值</h3> - -<p>如果成功修改了<code>[[Prototype]]</code>, <code>setPrototypeOf</code> 方法返回 <code>true</code>,否则返回 <code>false</code>.</p> - -<h2 id="描述">描述</h2> - -<p>这个 <code><strong>handler.setPrototypeOf</strong></code> 方法用于拦截 {{jsxref("Object.setPrototypeOf()")}}.</p> - -<h3 id="拦截">拦截</h3> - -<p>这个方法可以拦截以下操作:</p> - -<ul> - <li>{{jsxref("Object.setPrototypeOf()")}}</li> - <li>{{jsxref("Reflect.setPrototypeOf()")}}</li> -</ul> - -<h3 id="Invariants">Invariants</h3> - -<p>如果违反了下列规则,则proxy将抛出一个{{jsxref("TypeError")}}:</p> - -<ul> - <li><code><font face="Open Sans, arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">如果 </span></font>target</code> 不可扩展, 原型参数必须与<code>Object.getPrototypeOf(target)</code> 的值相同.</li> -</ul> - -<h2 id="示例">示例</h2> - -<p>如果你不想为你的对象设置一个新的原型,你的handler's的<code>setPrototypeOf</code>方法可以返回false,也可以抛出异常。</p> - -<p>The former approach means that any operation that performs such mutation, that throws an exception on failure to mutate, will have to create the exception itself. For example, {{jsxref("Object.setPrototypeOf()")}} will create and throw a <code>TypeError</code> itself. If the mutation is performed by an operation that <em>doesn't</em> ordinarily throw in case of failure, such as {{jsxref("Reflect.setPrototypeOf()")}}, no exception will be thrown.</p> - -<pre class="brush: js">var handlerReturnsFalse = { - setPrototypeOf(target, newProto) { - return false; - } -}; - -var newProto = {}, target = {}; - -var p1 = new Proxy(target, handlerReturnsFalse); -Object.setPrototypeOf(p1, newProto); // throws a TypeError -Reflect.setPrototypeOf(p1, newProto); // returns false -</pre> - -<p>The latter approach will cause <em>any</em> operation that attempts to mutate, to throw. This approach is required if you want even non-throwing operations to throw on failure, or you want to throw a custom exception value.</p> - -<pre class="brush: js">var handlerThrows = { - setPrototypeOf(target, newProto) { - throw new Error('custom error'); - } -}; - -var newProto = {}, target = {}; - -var p2 = new Proxy(target, handlerThrows); -Object.setPrototypeOf(p2, newProto); // throws new Error("custom error") -Reflect.setPrototypeOf(p2, newProto); // throws new Error("custom error")</pre> - -<h2 id="Specifications">Specifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>Initial definition.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td> </td> - </tr> - </tbody> -</table> - -<h2 id="Browser_compatibility">Browser compatibility</h2> - -<div> - - -<p>{{Compat("javascript.builtins.Proxy.handler.setPrototypeOf")}}</p> -</div> - -<h2 id="See_also">See also</h2> - -<ul> - <li>{{jsxref("Proxy")}}</li> - <li>{{jsxref("Proxy.handler", "handler")}}</li> - <li>{{jsxref("Object.setPrototypeOf()")}}</li> - <li>{{jsxref("Reflect.setPrototypeOf()")}}</li> -</ul> |