摘要:概述反射說起來和上一章節的代理基本一樣,只是使用的方式不同,設計理念也不同。
0x000 概述
反射說起來和上一章節的代理基本一樣,只是使用的方式不同,設計理念也不同。
反射提供了一系列的靜態函數,可以使用Reflect.function_name(...prams)調用,這一系列的方法和代理的處理器對象方法一致
0x001 apply
語法
Reflect.apply(target, thisArgument, argumentsList)
參數:
target:目標
thisArgument:調用的上下文
argumentList:參數列表
栗子
function sayHelloTo(name, age){ console.log(`hello ${name}, i am ${this.name}, ${age} years old now`) } let obj={ name: "jack" } Reflect.apply(sayHelloTo, obj, ["jack", 23]) // hello jack, i am jack, 23 years old now0x002 construct
語法
Reflect.construct(target, argumentsList[, newTarget])
target:目標
argumentsList:參數列表
newTarget:新的目標
栗子
function Person(name){ console.log(`Person ${name}`) } let obj={age:23} Reflect.construct(Person,["jack"]) // Person jack0x003 getOwnPropertyDescriptor
語法
Reflect.getOwnPropertyDescriptor(target, propKey)
target:目標
propKey:屬性值
栗子
let obj={name:"jack"} Reflect.getOwnPropertyDescriptor(obj, "name") // {value: "jack", writable: true, enumerable: true, configurable: true}0x004 defineProperty
語法
Reflect.defineProperty(target, propertyKey, attributes)
target:目標
propertyKey:屬性名
attributes:屬性描述
栗子
let obj={} Reflect.defineProperty(obj,"name",{value:"jack"}) console.log(obj) // {name:"jack"}0x005 deleteProperty
語法
Reflect.deleteProperty(target, propertyKey)
target:目標
propertyKey:屬性名
栗子
let obj={name:"jack"} Reflect.deleteProperty(obj, "name") // true0x006 ownKeys
語法
Reflect.ownKeys(target)
target:目標
栗子
Reflect.ownKeys({name:"jack"}) // ["name"]0x007 has
語法
Reflect.has(target, propertyKey)
target:目標
propertyKey:屬性名
栗子
Reflect.has({name:"jack"},"name") // true Reflect.has({name:"jack"},"age") // false0x008 get
語法
Reflect.get(target, propertyKey[, receiver])
target:目標
propertyKey:屬性名
receiver:接收者
栗子
let obj={name:"jack"} Reflect.get(obj, "name") // "jack"0x009 preventExtensions
語法
Reflect.preventExtensions(target)
target:目標
栗子
Reflect.ownKeys({name:"jack",age:"23"}) // (2)?["name", "age"]0x009 isExtensible
語法
Reflect.isExtensible(target)
target:目標
栗子
Reflect.isExtensible({}) // true Reflect.isExtensible(Object.seal({})) // false Reflect.isExtensible(Object.freeze({})) // false let obj=Reflect.preventExtensions({}) Reflect.isExtensible(obj) // false0x011 preventExtensions
語法
Reflect.preventExtensions(target)
target:目標
栗子
Reflect.ownKeys({name:"jack",age:"23"}) // (2)?["name", "age"]0x012 setPrototypeOf
語法
Reflect.setPrototypeOf(target, prototype)
target:目標
prototype:要設置的 prototype
栗子
Reflect.setPrototypeOf(obj, Array) Reflect.getPrototypeOf(obj) // ? Array() { [native code] }0x013 getPrototypeOf
語法
Reflect.getPrototypeOf(target)
target:目標
栗子
Reflect.getPrototypeOf([]) // [constructor: ?, concat: ?, copyWithin: ?, fill: ?, find: ?,?…]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108674.html
摘要:方法與代理處理程序的方法相同。使用給目標函數傳入指定的參數。當然,不用反射也可以讀取的值。的例子我們可以理解成是攔截了方法,然后傳入參數,將返回值賦值給,這樣我們就能在需要讀取這個返回值的時候調用。這種代理模式和的代理有異曲同工之妙。 反射 Reflect 當你見到一個新的API,不明白的時候,就在瀏覽器打印出來看看它的樣子。 showImg(https://segmentfault....
摘要:方法與代理處理程序的方法相同。使用給目標函數傳入指定的參數。當然,不用反射也可以讀取的值。的例子我們可以理解成是攔截了方法,然后傳入參數,將返回值賦值給,這樣我們就能在需要讀取這個返回值的時候調用。這種代理模式和的代理有異曲同工之妙。 反射 Reflect 當你見到一個新的API,不明白的時候,就在瀏覽器打印出來看看它的樣子。 showImg(https://segmentfault....
摘要:代理和反射的定義調用可常見代替其它目標對象的代理,它虛擬化了目標,所以二者看起來功能一致。代理可攔截引擎內部目標的底層對象操作,這些底層操作被攔截后會觸發響應特定操作的陷阱函數。 代理和反射的定義 調用 new Proxy() 可常見代替其它目標 (target) 對象的代理,它虛擬化了目標,所以二者看起來功能一致。 代理可攔截JS引擎內部目標的底層對象操作,這些底層操作被攔截后會觸發...
摘要:是陷阱函數對應的反射方法,同時也是操作的默認行為。對象外形指的是對象已有的屬性與方法的集合,由于該屬性驗證只須在讀取屬性時被觸發,因此只要使用陷阱函數。無論該屬性是對象自身的屬性還是其原型的屬性。 主要知識點:代理和反射的定義、常用的陷阱函數、可被撤銷的代理、將代理對象作為原型使用、將代理作為類的原型showImg(https://segmentfault.com/img/bVbfWr...
閱讀 1684·2021-09-26 09:55
閱讀 3713·2021-09-22 15:31
閱讀 7328·2021-09-22 15:12
閱讀 2209·2021-09-22 10:02
閱讀 4625·2021-09-04 16:40
閱讀 1031·2019-08-30 15:55
閱讀 3018·2019-08-30 12:56
閱讀 1813·2019-08-30 12:44