前回の記事「この記事ではVueでルーティング切り替えによる非同期リクエストを終了する方法を解説します(コード付き)」で、Vueでルーティング切り替えによる非同期リクエストを終了する方法を紹介しました。 。 js の Reflect 組み込みオブジェクトを理解するには、次の記事が役立ちます。一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。
Reflect
は、JavaScript
操作のインターセプトを提供する組み込みオブジェクトです。方法。これらのメソッドはプロセッサ オブジェクトのメソッドと同じです。 Reflect
は関数オブジェクトではないため、構築できません。
ほとんどのグローバル オブジェクトとは異なり、Reflect
にはコンストラクターがありません。 new
演算子と一緒に使用したり、関数として Reflect
オブジェクトを呼び出したりすることはできません。 Reflect
のすべてのプロパティとメソッドは静的です (Math
オブジェクトと同様)。
Chrome: 49
Firefox (Gecko): 42
他のブラウザはまだ実装されていません
Reflect.apply(target, thisArgument, argumentList)
target
ターゲット関数。
この議論
target
関数が呼び出されたときにバインドされる this
オブジェクト。
argumentsList
ターゲット関数の呼び出し時に渡される実際のパラメータのリスト。このパラメータは配列のようなオブジェクトである必要があります。
Reflect.apply()
Reflect.construct(target, argumentList[, newTarget])
静的メソッドReflect.apply()
指定されたパラメーター リストを通じてターゲット (target
) 関数への呼び出しを開始します。
Reflect.apply(Math.floor, undefined, [1.75]); // 1; Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]); // "hello" Reflect.apply(RegExp.prototype.exec, /ab/, ["confabulation"]).index; // 4 Reflect.apply("".charAt, "ponies", [3]); // "i"
Reflect.construct()
Reflect.construct()
このメソッドは、new 演算子コンストラクターと少し似た動作をします。これは、以下と同等です。実行中新しいターゲット(...args)
。
var d = Reflect.construct(Date, [1776, 6, 4]); d instanceof Date; // true d.getFullYear(); // 1776
Reflect.defineProperty()
Reflect.defineProperty()
は、Object.defineProperty () のような静的メソッドです。
ただし、ブール値を返します
const object1 = {}; if (Reflect.defineProperty(object1, "property1", { value: 42 })) { console.log("property1 created!"); // expected output: "property1 created!" } else { console.log("problem creating property1"); } console.log(object1.property1); // expected output: 42
Reflect.deleteProperty()
静的メソッドReflect.deleteProperty()
属性の削除を許可します。これは delete 演算子
によく似ていますが、関数です。 Reflect.deleteProperty
オブジェクトのプロパティを削除できます。属性が正常に削除されたかどうかを示すブール値を返します。これは、非厳密な削除演算子とほぼ同じです。
Reflect.deleteProperty(target, propertyKey)
var obj = { x: 1, y: 2 }; Reflect.deleteProperty(obj, "x"); // true obj; // { y: 2 } var arr = [1, 2, 3, 4, 5]; Reflect.deleteProperty(arr, "3"); // true arr; // [1, 2, 3, , 5] // 如果属性不存在,返回 true Reflect.deleteProperty({}, "foo"); // true // 如果属性不可配置,返回 false Reflect.deleteProperty(Object.freeze({ foo: 1 }), "foo"); // false
Reflect.get()
Reflect.get ()
メソッドは、object (target[propertyKey])
からプロパティを取得するように動作しますが、関数として実行されます。
Reflect.get(ターゲット, propertyKey[, レシーバー])
// Object var obj = { x: 1, y: 2 }; Reflect.get(obj, "x"); // 1 // Array Reflect.get(["zero", "one"], 1); // "one" // Proxy with a get handler var x = { p: 1 }; var obj = new Proxy(x, { get(t, k, r) { return k + "bar"; }, }); Reflect.get(obj, "foo"); // "foobar"
Reflect.getOwnPropertyDescriptor()
静的メソッドReflect.getOwnPropertyDescriptor() は、Object.getOwnPropertyDescriptor()
メソッドに似ています。指定されたプロパティがオブジェクト内に存在する場合、そのプロパティ記述子を返します。それ以外の場合は、未定義が返されます。
Reflect.getOwnPropertyDescriptor(target, propertyKey)
Reflect.getOwnPropertyDescriptor({ x: "hello" }, "x"); // {value: "hello", writable: true, enumerable: true, configurable: true} Reflect.getOwnPropertyDescriptor({ x: "hello" }, "y"); // undefined Reflect.getOwnPropertyDescriptor([], "length"); // {value: 0, writable: true, enumerable: false, configurable: false}
Reflect.getPrototypeOf()
静的メソッドReflect .getPrototypeOf() メソッドと Object.getPrototypeOf()
メソッドは同じです。どちらも、指定されたオブジェクトのプロトタイプ (つまり、内部 [[Prototype]]
属性の値) を返します。
Reflect.getPrototypeOf(target)
Reflect.getPrototypeOf({}); // Object.prototype Reflect.getPrototypeOf(Object.prototype); // null Reflect.getPrototypeOf(Object.create(null)); // null
Reflect.has()
静的メソッドReflect.has ()
は、in
演算子と同じ効果があります。
Reflect.has(target, propertyKey)
Reflect.has({ x: 0 }, "x"); // true Reflect.has({ x: 0 }, "y"); // false // 如果该属性存在于原型链中,返回true Reflect.has({ x: 0 }, "toString"); // Proxy 对象的 .has() 句柄方法 obj = new Proxy( {}, { has(t, k) { return k.startsWith("door"); }, } ); Reflect.has(obj, "doorbell"); // true Reflect.has(obj, "dormitory"); // false
Reflect.isExtensible()
静的メソッドReflect .isExtensible()
オブジェクトが拡張可能かどうか (つまり、新しい属性を追加できるかどうか) を判断します。 Object.isExtensible()
メソッドと似ていますが、いくつかの違いがあります。詳細については、違い
を参照してください。
Reflect.isExtensible(ターゲット)
// New objects are extensible. var empty = {}; Reflect.isExtensible(empty); // === true // ...but that can be changed. Reflect.preventExtensions(empty); Reflect.isExtensible(empty); // === false // Sealed objects are by definition non-extensible. var sealed = Object.seal({}); Reflect.isExtensible(sealed); // === false // Frozen objects are also by definition non-extensible. var frozen = Object.freeze({}); Reflect.isExtensible(frozen); // === false //diff Object.isExtensible Reflect.isExtensible(1); // TypeError: 1 is not an object Object.isExtensible(1); // false
Reflect.ownKeys()
静的メソッドReflect.ownKeys ()
ターゲット オブジェクト自体のプロパティ キーで構成される配列を返します。
Reflect.ownKeys(ターゲット)
const object1 = { property1: 42, property2: 13, }; var array1 = []; console.log(Reflect.ownKeys(object1)); // expected output: Array ["property1", "property2"] console.log(Reflect.ownKeys(array1)); // expected output: Array ["length"] Reflect.ownKeys({ z: 3, y: 2, x: 1 }); // [ "z", "y", "x" ] Reflect.ownKeys([]); // ["length"] var sym = Symbol.for("comet"); var sym2 = Symbol.for("meteor"); var obj = { [sym]: 0, str: 0, "773": 0, "0": 0, [sym2]: 0, "-1": 0, "8": 0, "second str": 0, }; Reflect.ownKeys(obj); // [ "0", "8", "773", "str", "-1", "second str", Symbol(comet), Symbol(meteor) ] // Indexes in numeric order, // strings in insertion order, // symbols in insertion order
Reflect.preventExtensions()
静的メソッドReflect.preventExtensions ()
メソッドは、新しいプロパティがオブジェクトに追加されるのを防ぎます (たとえば、オブジェクトに対する将来の拡張機能がオブジェクトに追加されるのを防ぎます)。このメソッドは Object.preventExtensions()
に似ていますが、いくつかの違いがあります。
Reflect.preventExtensions(target)
// Objects are extensible by default. var empty = {}; Reflect.isExtensible(empty); // === true // ...but that can be changed. Reflect.preventExtensions(empty); Reflect.isExtensible(empty); // === false //diff Object.preventExtensions() Reflect.preventExtensions(1); // TypeError: 1 is not an object Object.preventExtensions(1); // 1
Reflect.set()
静的メソッドReflect.set ()
オブジェクトにプロパティを設定するのと同じように機能します。
Reflect.set(ターゲット, propertyKey, 値[, レシーバ])
// Object var obj = {}; Reflect.set(obj, "prop", "value"); // true obj.prop; // "value" // Array var arr = ["duck", "duck", "duck"]; Reflect.set(arr, 2, "goose"); // true arr[2]; // "goose" // It can truncate an array. Reflect.set(arr, "length", 1); // true arr; // ["duck"]; // With just one argument, propertyKey and value are "undefined". var obj = {}; Reflect.set(obj); // true Reflect.getOwnPropertyDescriptor(obj, "undefined"); // { value: undefined, writable: true, enumerable: true, configurable: true }
Reflect.setPrototypeOf()
静态方法Reflect.setPrototypeOf()与Object.setPrototypeOf()
方法是一致的。它将指定对象的原型 (即,内部的[[Prototype]]
属性)设置为另一个对象或为null
。
Reflect.setPrototypeOf(target, prototype)
Reflect.setPrototypeOf({}, Object.prototype); // true // It can change an object's [[Prototype]] to null. Reflect.setPrototypeOf({}, null); // true // Returns false if target is not extensible. Reflect.setPrototypeOf(Object.freeze({}), null); // false // Returns false if it cause a prototype chain cycle. var target = {}; var proto = Object.create(target); Reflect.setPrototypeOf(target, proto); // false
推荐学习:JavaScript视频教程
以上がJavaScript の Reflect 組み込みオブジェクトの簡単な分析 (詳細なコードの説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。