Reflect

Refelct

Reflect是一个内置的对象,他提供拦截的JavaScript的操作的方法。一共有 13 个静态的方法

Reflect的描述:

reflect与大多数的对象不同,Reflect并非一个构造函数,所以不能通过new运算符来对其进行引用,或者将Reflect对象作为一个函数来调用,Reflect的所有方法和属性都是静态的,相当于Math,Refelct相当一一个静态的类。

Reflect的静态的方法:

Relect.apply(target,thisargument,argumentsList) 通过指定的参数列表发起对目标(target)函数的调用。

   target:目标函数

   thisArgument  tagert函数调用时绑定的this对象,也就是谁的方法

   argument   target函数调用时传入的参数

reflect.apply("".charAt,"liquan",[3]); // u

Reflect.construct(target, argumentsList[, newTarget]) 相当一替代new字符串   

  target相当一调用的目标构造函数

  arguments  相当一传递构造函数的参数

  第三个参数就是当做原型对象的函数,实现继承的效果

var obj = new Foo(...args);
var obj = Reflect.construct(Foo, args); 

function Name (value) {
    this.name = value;
}
function Perosn () {

}
Perosn.prototype.show  = function () {
    console.log("你好");
}
let person = Reflect.construct(Name,['李权'],Perosn);  // 注意传递的参数是一个数组,如果不传递数组会报错
console.log(person.name);
console.log(person.show());

Reflect.defineProperty()

静态方法 Reflect.defineProperty()基本等同于 Object.defineProperty()方法,唯一不同的是返回Boolean值。

语法 : Reflect.defineProperty(target,propertyKey, attribute);

参数:

   target: 目标对象

   propertyKey: 要定义或修改的属性名

   attribute; 要定义或修改的属性的描述  相当于静态属性的描述符 替换了Object.definProperty

返回值: 是一个boolean的值 

异常: 如果 target不是一个对象会抛出typeError的错误

const obj = {}; 
let bool = Reflect.defineProperty(obj,'name',{value:7,writable:false});
console.log(bool);
console.log(obj.name);
obj.name = "李权";
console.log(obj.name); // 7

Reflect.deleteProperty() 允许用于删除属性

 他像delete Obj.name 但是Reflect.deleteProperty它是一个函数

  语法:Reflect.deleteProperty(target,PropertyKey);

  参数: target 目标对象  propertyKey是需要删除属性的名字 

  返回值: 是一个布尔值判断是否删除成功

 异常: 如果目标对象不是一个Object 会抛出一个TypeError

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(target,property) 得到目标对象上的属性值,不同的是它是一个函数

异常: 如果target不是一个Object,会抛出一个typeError

Reflect.getOwnPropertyDescriptor()

   Reflect.getOwnPropertyDescriptor()和Obejct.getOwnPropertyDecriptor方法相似,如果该对象存在,则返回给定属性的修饰符

Reflect.getPrototypeOf(target) 

  Reflect.getPrototypeOf() 和Object.getPrototypeOf() 是几乎一样的,返回目标对象的原型。

// 如果参数为 Object,返回结果相同
Object.getPrototypeOf({})   // Object.prototype
Reflect.getPrototypeOf({})  // Object.prototype

// 在 ES5 规范下,对于非 Object,抛异常
Object.getPrototypeOf('foo')   // Throws TypeError
Reflect.getPrototypeOf('foo')  // Throws TypeError

// 在 ES2015 规范下,Reflect 抛异常, Object 强制转换非 Object
Object.getPrototypeOf('foo')   // String.prototype
Reflect.getPrototypeOf('foo')  // Throws TypeError

// 如果想要模拟 Object 在 ES2015 规范下的表现,需要强制类型转换
Reflect.getPrototypeOf(Object('foo'))  // String.prototype

Reflect.has(target,propertyKey)

Reflect.has() 和 in 操作符差不多

返回值 是一个布尔值,

异常: 如果传入的对象不是一个Object 会抛出一个异常。TypeError

Reflect.isExtensible(target) 判断对象是否可扩展,和Object.isExtensible()相似,但有一点差别

   如果该方法的第一个参数不是一个对象(原始值),那么将造成一个 TypeError 异常。对于 Object.isExtensible(),非对象的第一个参数会被强制转换为一个对象。

返回值:是一个布尔值

Reflect.ownKeys(target) 返回目标对象的自身属性构建的数组

异常: 如果不是一个Object会抛出一个异常。

Reflect.preventExtensions(target) 阻止目标对象扩展

返回值:是一个布尔值,

异常: 如果不是一个Object会抛出TypeError的错误的异常。

Relfect.set(target,propertyKey,value) 相当一在一个对象上设置属性,并添加值

Reflect.setPrototypeOf(target)给目标对象设置原型对象,返回值是一个boolean 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值