日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es6 --- Reflect的静态方法

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es6 --- Reflect的静态方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Reflect.get(target, name, receiver): 查找并返回 target對象的 name屬性,若沒有,返回undefined

var myObject = {foo: 1,bar: 2,get baz() {return this.foo + this.bar;}, }Reflect.get(myObject, 'foo'); // 1// 若name屬性部署了讀取函數(getter),則讀取函數的this 綁定receiver var myObject = {foo: 1,bar: 2,get baz() {return this.foo + this.bar;}, }; var myReceiverObject = {foo: 4,bar: 4, }; Reflect.get(myObject, 'baz', myReceiverObject); // 8// 注:第一個參數要為對象

Reflect.set(target, name, value, receiver): 設置target對象的name屬性等于value

var myObject = {foo: 1,set bar(value) {return this.foo = value;}, }myObject.foo // 1 Reflect.set(myObject, 'foo', 2); myObject.foo // 2 Reflect.set(myObject, 'bar', 3); myObject.foo // 3// 注:調用myObject對象的foo屬性是直接復制,調用bar方法,將3傳入,給foo賦值,// Reflect.set 會觸發Proxy.defineProperty攔截 let p = {a: 'a' }; let handler = {set(target, key, value, receiver) {console.log('set');Reflect.set(target, key, value, receiver) },defineProperty(target, key, attribute) {console.log('defineProperty');Reflect.defineProperty(target, key, attribute);} }; let obj = new Proxy(p, handler); obj.a = 'A'; // 當執行obj.a = 'A‘的時候,會執行handler.set方法, // handler.set方法里面的Reflect.set會觸發handler.defineProperty方法...

Reflect.has(obj, name): 對應name in obj 中的in 運算符

var myObject = {foo: 1, };// 舊寫法 'foo' in myObject // true// 新寫法 Reflect.has(myObject, 'foo') // true

Reflect.deleteProperty(obj, name): 等同于delete obj[name], 用于刪除對象的屬性

const myObj = { foo: 'bar' };// 舊寫法 delete myObj.foo;// 新寫法 Reflect.delete(myObj, 'foo');

Reflect.construct(target, args): 等同于new target(…args)

function Greeting(name) {this.name = name; }// new 的寫法 const instance = new Greeting('張三');// Reflect.construct 的寫法 const instance = Reflect.construct(Greeting, [' 張三']); // 注意中括號,若沒有會報錯 Uncaught TypeError:CreateListFromArrayLike called on non-object

Reflect.getPrototypeOf(obj): 用于讀取對象的__proto__屬性,

const myObj = new FancyThing();// 舊寫法 Object.getPrototypeOf(myObj) === FancyThing.prototype;// 新寫法 Reflect.getPrototypeOf(myObj) === FancyThing.prototype;// 注: Object.getPrototypeOf 中,若參數不是對象,會先將參數轉換成對象,而Reflect會報錯

Reflect.setPrototypeOf(obj,newProto): 用于設置對象的__proto__屬性.

const myObj = new FancyThing();// 舊寫法 Object.setPrototypeOf(myObj, OtherThing.prototype);// 新寫法 Reflect.setPrototypeOf(myObj, OtherThing.prototype);// 如果第一個參數不是對象,Object.setPrototypeOf 會返回第一個參數本身. // Reflect.setPrototypeOf 會報錯 // 如果第一個參數是 undefined 或null, Object 和 Reflect方法都會報錯. console.log(Object.setPrototypeOf(1, {})); console.log(Reflect.setPrototypeOf(1,{})); console.log(Object.setPrototypeOf(null,{})); console.log(Reflect.setPrototypeOf(null,{}));



Reflect.apply(func, thisArg, args): 等同于Function.prototype.apply.call(func, thisArg, args)

const ages = [11, 33, 12, 54, 18, 96];// 舊寫法 const youngest = Math.min.apply(Math, ages); const oldest = Math.max.apply(Math, ages); const type = Object.prototype.toString.call(youngest);// 新寫法 const youngest = Reflect.apply(Math.min, Math, ages); const oldest = Reflect.apply(Math.max, Math, ages); const type = Refelct.apply(Object.prototype.toString, youngest, []);

Reflect.defineProperty(target, propertyKey, attributes): 等同于Object.defineProperty

function MyData() {/*...*/ }// 舊寫法 Object.defineProperty(MyDate, 'now', {value: () => Date.now() });// 新寫法 Reflect.defineProperty(MyDate, 'now', {value: () => Date.now() });

Reflect.getOwnPropertyDescriptor: 等同于Object.getOwnPropertyDescriptor,用于獲取指定屬性的描述對象

var myObject = {}; Object.defineProperty(myObject, 'hidden', {value: true,enumerable: false, });// 舊寫法(第一個參數非對象時,返回undefined) var theDescriptor = Object.getOwnPropertyDescriptor(myObject, 'hidden');// 新寫法(第一個參數非對象時,報錯) var theDescriptor = Reflect.getOwnPropertyDescriptor(myObject, 'hidden');

Reflect.isExtensible(target): 對應Object.isExtensible,表示對象是否可擴展

const myObject = {};// 舊寫法(若參數為非對象,會返回false) Object.isExtensible(myObject);// 新寫法(若參數為非對象,會報錯) Reflect.isExtensible(myObject);

Reflect.preventExtensions(target): 對應Object.preventExtensions方法,用于將一個對象變為不可擴展

var myObject = {];// 舊寫法 Object.preventExtensions(myObject);// 新寫法 Reflect.preventExtensions(myObject);// 若參入的參數是非對象 // ES5 Object.preventExtensions(1) // 報錯 // ES6 Object.preventExtensions(1) // 1 // ES6 Reflect.preventExtensions(1) // 報錯

Reflect.ownKeys(target): Object.getOwnPropertyNames 與 Object.getOwnPropertySymbols 之和

var myObject = {foo: 1,bar: 2,[symbol.for('baz')]: 3,[symbol.for('bing')]: 4, };// 舊寫法 Object.getOwnPropertyNames(myObject) // ['foo', 'bar'] Object.getOwnpropertySymbols(myObject) // [Symbol(baz), Symbol(bing)]// 新寫法 Reflect.ownKeys(myObject) // ['foo', 'bar', Symbol(baz), Symbol(bing)]

參考《ES6標準入門》(第3版)P262~P270

總結

以上是生活随笔為你收集整理的es6 --- Reflect的静态方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。