この翻訳は不完全です。英語から この記事を翻訳 してください。

handler.setPrototypeOf()Object.setPrototypeOf() に対するトラップです。

構文

var p = new Proxy(target, {
  setPrototypeOf: function(target, prototype) {
  }
});

引数

次の引数は setPrototypeOf メソッドに渡されます。this はハンドラにバインドされます。

target
ターゲットオブジェクトです。
prototype
オブジェクトの新しいプロトタイプ、または null です。

戻り値

setPrototypeOf メソッドは [[Prototype]] を変更できたかどうかを真偽値で返します。

説明

handler.setPrototypeOf メソッドは Object.setPrototypeOf() に対するトラップです。

インターセプト

このトラップは下記の操作をインターセプトできます。

不変条件

次の不変条件に違反している場合、プロキシはTypeErrorをスローします。

  • target が拡張可能でない場合、引数の prototype は Object.getPrototypeOf(target) と同じ値でなければなりません。

If you want to disallow setting a new prototype for your object, your handler's setPrototypeOf method can either return false, or it can throw an exception.

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, Object.setPrototypeOf() will create and throw a TypeError itself.  If the mutation is performed by an operation that doesn't ordinarily throw in case of failure, such as Reflect.setPrototypeOf(), no exception will be thrown.

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

The latter approach will cause any 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.

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")

仕様

仕様 ステータス コメント
ECMAScript 2015 (6th Edition, ECMA-262)
[[SetPrototypeOf]] の定義
標準 Initial definition.
ECMAScript Latest Draft (ECMA-262)
[[SetPrototypeOf]] の定義
ドラフト  

ブラウザ実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応 ? ?49 なし ? ?
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 ? ? ?49 ? ? ?

関連情報

ドキュメントのタグと貢献者

このページの貢献者: segayuu, SphinxKnight, shide55
最終更新者: segayuu,