Js reflect,js 反射 reflect
语义
反映是一个内置的对象,它提供拦截Java脚本语言操作的方法。这些方法与处理器对象的方法相同反思。不是一个函数对象,因此它是不可构造的。
描述
与大多数全局对象不同,反映没有构造函数。你不能将其与一个新的运算符一起使用,或者将显示对象作为一个函数来调用反思。的所有属性和方法都是静态的(就像数学对象)。
兼容性
铬合金:49
火狐(壁虎):42
其他浏览器暂未实现
目标
目标函数。
这个论点
目标
函数调用时绑定的这对象。
参数列表
目标函数调用时传入的实参列表,该参数应该是一个类数组的对象。
句法
Reflect.apply()
静态方法Reflect.apply()通过指定的参数列表发起对目标(目标)函数的调用。
Reflect.apply(Math.floor,undefined,[1.75]);
//1;
反思。应用(字符串。from charcode,undefined,[104,101,108,108,111]);
//你好
反思。应用(正则表达式。原型。exec,/ab/,[confabulation]).指数;
//4
Reflect.apply().charAt,”小马,[3]);
//我Reflect.construct()
Reflect.construct()方法的行为有点像新的操作符构造函数,相当于运行新目标(.args)。
var d=Reflect.construct(Date,[1776,6,4]);
日期的实例;//真
d。获取整年();//1776Reflect.defineProperty()
Reflect.defineProperty()是一个静态的方法,看起来像Object.defineProperty()但是它返回一个布尔值
const object 1={ };
如果(反思。定义属性(对象1,“属性1”,{值:42 }){
console.log(property1已创建!);
//预期输出:"属性1已创建!"
}否则{
console.log("创建属性一时出现问题");
}
控制台。日志(对象1。房产1);
//预期产量:42Reflect.deleteProperty()
静态方法Reflect.deleteProperty()允许用于删除属性。它很像删除操作员,但它是一个函数Reflect.deleteProperty属性允许你删除一个对象上的属性。返回一个布尔代数学体系的值表示该属性是否被成功删除。它几乎与非严格的删除运算符相同。
var obj={ x: 1,y:2 };
Reflect.deleteProperty(obj, x );//真
obj//{ y: 2 }
var arr=[1,2,3,4,5];
Reflect.deleteProperty(arr, 3 );//真
arr//[1,2,3,5]
//如果属性不存在,返回真实的
Reflect.deleteProperty({}, foo );//真
//如果属性不可配置,返回错误的
反思。删除属性(对象。冻结({ foo:1 }), foo );//falseReflect.get()
Reflect.get()方法的工作方式,就像从对象(目标[属性关键字])中获取属性,但它是作为一个函数执行的。
//对象
var obj={ x: 1,y:2 };
Reflect.get(obj, x );//1
//数组
Reflect.get([zero , one],1);//一
//带有得到处理程序的代理
var x={ p:1 };
var obj=新代理(x,{
get(t,k,r) {
返回k吧
},
});
Reflect.get(obj, foo );//foobarReflect.getOwnPropertyDescriptor()
静态方法反思。getownpropertydescriptor()与对象。getownpropertydescriptor()方法相似。如果在对象中存在,则返回给定的属性的属性描述符。否则返回未定义。
反思。getownpropertydescriptor({ x: hello }, x );
//{value:你好,可写:真的,可枚举:真的,可配置:true}
反思。getownpropertydescriptor({ x: hello }, y );
//未定义
反思。getownpropertydescriptor([], length );
//{值:0,可写:真,可枚举:假,可配置:假}Reflect.getPrototypeOf()
静态方法Reflect.getPrototypeOf()与Object.getPrototypeOf()方法是一样的。都是返回指定对象的原型(即,内部的[[原型]]属性的值)。
反思。getprototypeof({ });//对象。草案
反思。getprototypeof(对象。原型);//null
反思。getprototypeof(对象。create(null));//nullReflect.has()
静态方法Reflect.has()作用与在操作符相同。
Reflect.has({ x: 0 }, x );//真
Reflect.has({ x: 0 }, y );//假
//如果该属性存在于原型链中,返回真实的
Reflect.has({ x: 0 }, toString );
//代理对象的。有()句柄方法
obj=新代理(
{},
{
has(t,k) {
返回k .以( door )开头;
},
}
);
Reflect.has(obj,门铃);//真
Reflect.has(obj,宿舍);//falseReflect.isExtensible()
静态方法Reflect.isExtensible()判断一个对象是否可扩展(即是否能够添加新的属性)。与它Object.isExtensible()方法相似,但有一些不同,详情可见差异。
Reflect.isExtensible(target)
//新对象是可扩展的。
var empty={ };
Reflect.isExtensible(空);//===真
//.但是这可以改变。
Reflect.preventExtensions(空);
Reflect.isExtensible(空);//===false
//根据定义,密封对象是不可扩展的。
var sealed=对象。印章({ });
Reflect.isExtensible(密封);//===false
//根据定义,冻结的对象也是不可扩展的。
var冻结=对象。冻结({ });
Reflect.isExtensible(冻结);//===false
//diff Object.isExtensible
反思。是可扩展的(1);
//TypeError: 1不是对象
对象。是可扩展的(1);
//falseReflect.ownKeys()
静态方法Reflect.ownKeys()返回一个由目标对象自身的属性键组成的数组。
常量对象1={
物业1: 42,
物业2: 13,
};
var数组1=[];
控制台。日志(反映。ownkeys(对象1));
//预期的输出:数组[属性1 ,属性2]
控制台。日志(反映。拥有密钥(数组1));
//预期输出:数组[长度]
Reflect.ownKeys({ z: 3,y: 2,x:1 });//[ z , y , x ]
反思。自己的密钥([]);//[长度]
var sym=符号。for(彗星);
var sym 2=符号。for(‘流星’);
var obj={
[sym]: 0,
字符串:0,
773: 0,
0: 0,
[sym2]: 0,
-1: 0,
8: 0,
第二个字符串:0,
};
反思。拥有密钥(obj);
//[ 0 , 8 , 773 , str ,-1 ,第二str ,符号(彗星),符号(流星)]
//以数字顺序排列的索引,
//按插入顺序排列的字符串,
//按插入顺序排列的符号Reflect.preventExtensions()
静态方法Reflect.preventExtensions()方法阻止新属性添加到对象例如:防止将来对对象的扩展被添加到对象中)。该方法与Object.preventExtensions()相似,但有一些不同点。
//默认情况下,对象是可扩展的。
var empty={ };
Reflect.isExtensible(空);//===真
//.但是这可以改变。
Reflect.preventExtensions(空);
Reflect.isExtensible(空);//===false
//diff Object.preventExtensions()
反思。防止扩展(1);
//TypeError: 1不是对象
对象。防止扩展(1);
//1Reflect.set()
静态方法Reflect.set()工作方式就像在一个对象上设置一个属性。
//对象
var obj={ };
Reflect.set(obj, prop , value );//真
道具;//值
//数组
var arr=[鸭,鸭,鸭];
Reflect.set(arr,2, goose );//真
arr[2];//鹅
//它可以截断数组。
Reflect.set(arr, length ,1);//真
arr//[鸭子];
//只有一个参数,propertyKey和值是"未定义的"。
var obj={ };
反思。set(obj);//真
反思。getownpropertydescriptor(obj, undefined );
//{值:未定义,可写:真,可枚举:真,可配置:真}Reflect.setPrototypeOf()
静态方法Reflect.setPrototypeOf()与Object.setPrototypeOf()方法是一致的。它将指定对象的原型(即,内部的[[原型]]属性)设置为另一个对象或为零。
Reflect.setPrototypeOf({},object。原型);//真
//它可以将对象的[[原型]]更改为零.
Reflect.setPrototypeOf({},null);//真
//如果目标不可扩展,则返回错误.
反思。setprototypeof(对象。冻结({ }),null);//假
//如果它导致原型链循环,则返回错误.
var target={ };
var proto=object。创建(目标);
Reflect.setPrototypeOf(target,proto);//假推荐学习:JavaScript视频教程以上就是浅析爪哇岛描述语言中显示内置对象(代码详解)的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。