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 now
0x002 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 jack
0x003 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') // true
0x006 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') // false
0x008 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) // false
0x011 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: ƒ, …]