用新对象 Reflect 代替 Object 部分静态方法与 function 的 apply 方法
1.原因4点,见http://es6.ruanyifeng.com/#docs/reflect
2.Reflect方法有13个
Reflect.apply(target,thisArg,args)
Reflect.construct(target,args)
Reflect.get(target,name,receiver)
Reflect.set(target,name,value,receiver)
---属性---
Reflect.defineProperty(target,name,desc)//configurable enumerable writable value
Reflect.deleteProperty(target,name)
Reflect.has(target,name)
Reflect.ownKeys(target)//自身可枚举不可枚举属性
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.isExtensible(target)
Reflect.preventExtensions(target)//不能添加新属性
---原型---
Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)
3.Object剩余静态方法10个
Object.assign()//复制对象
Object.create()
Object.is()//判断两个值是否相等,大致等于===,两点区别(+0,-0不相等;NaN,NaN相等)
Object.freeze()//冰冻对象,只能查询属性值
Object.isFrozen()
Object.seal()//密封对象,只可以修改(仅仅是值),查询已有属性的值。
Object.isSealed()
Object.keys()//自身可枚举属性
Object.values()//自身可枚举属性的值
Object.entries()//自身可枚举属性的[[key,value],...]
备注:Object的实例方法有四个,mdn还有其它5个(3个非标准,2个极少用)
Object.prototype.hasOwnProperty()
Object.prototype.isPrototypeOf()
Object.prototype.propertyIsEnumerable()
Object.prototype.toString()
preventExtensions seal freeze 区别
function |
add property |
delete property |
modify property value |
configurable enumerable writable |
prototype modify |
freeze(啥都不能干了) |
× |
× |
× |
× |
× |
seal(只能修改属性值) |
× |
× |
√ |
× |
× |
preventExtensions(不能添加新值) |
× |
√ |
√ |
√ |
× |
评论