ES6内置对象扩展

左手的ㄟ右手 2021-09-07 06:10 570阅读 0赞

ES6内置对象扩展

  • 一、Object.is()
  • 二、Object.assign()
  • 三、setPrototypeOf()
  • 四、object.getPrototypeOf()
  • 五、es6增强对象写法
  • 六、proxy
  • 七、Object.observe()
  • 7.Object.unobserve

一、Object.is()

object.is()用来严格比较俩个值是否相等,与严格比较运算符===的行为基本一致。
不同之处有两点。
1.+0不等于-0,
2.NaN等于自生

  1. +0 === -0 //true
  2. NaN === NaN //false
  3. Object.is(+0,-0)//false
  4. Object.is(NaN,NaN)//true

二、Object.assign()

将源对象的所有可枚举属性,复制到目标对象上。
至少需要俩个对象为参数
第一个对象是目标对象
第二个是源对象
只要有一个参数不是对象,就会抛出TypeError错误。
同名属性,目标对象的属性值会被覆盖
要是多个源对象的话,后面的会覆盖前面的。
这是浅拷贝

三、setPrototypeOf()

用法和__proto__相同
用来设置一个对象的原型对象

  1. Object.setPrototypeOf({ },null)
  2. //等同于
  3. functionobjproto){
  4. obj.__proto__=proto;
  5. return obj;
  6. }

就是设置
对象实例的原型对象。相当于封装了__proto__
来设置实例的原型对象

四、object.getPrototypeOf()

用于读取一个对象的prototype对象
即获取一个对象的原型

五、es6增强对象写法

将同名的属性和变量属性值缩写成一个值

  1. let obj ={
  2. birth:birth
  3. say:function(){
  4. }
  5. }
  6. es6中写成
  7. let obj = {
  8. birth,
  9. say(){ }
  10. }

这种写法在函数返回多个值时非常好用,直接返回一个对象,就行。
return {x,y}
等同于
return {
x:x
y:y
}

六、proxy

在外界访问对象时,可以先通过proxy设置的一层拦截,访问可以被过滤和改写。
es6提供proxy构造函数,来生成proxy实例对象

  1. var proxt =new Proxy({ },{ get:function(a,b){ }})

构造函数接受两个参数,第一个是目标对象
第二个是拦截函数,用来拦截对目标对象的访问请求,它有一个get方法,
第一个参数是目标对象,第二个参数是所要访问的目标对象的属性。
可以用来设置,对象存在的属性能访问到,不存在的属性就返回一个其他的。

七、Object.observe()

用来监听对象的变化,
接受两个参数,第一个是目标对象,第二个是回调函数
一旦监听对象发生变化,就会触发回调函数。
回调函数接受一个数组参数,
每一个元素对应对象的每一个键值对,
目前支持六种变化
add,updata,delete,setPrototype,reconfigure(属性的attributes对象发生变化),preventExtensions(当一个对象变得不可扩展时,也就不必再观察了)
还可以接受第三个参数,用来指定监听的事件种类。

  1. Object.observe(o,observer,['delete'])

这种表示只发生delete事件时,才会调用回调函数。

7.Object.unobserve

取消对象 的监听

发表评论

表情:
评论列表 (有 0 条评论,570人围观)

还没有评论,来说两句吧...

相关阅读

    相关 es6 对象扩展

    1.属性的简洁表示法     function f(x,y) \{       return \{x,y\};     \}     // 等同于     funct

    相关 ES6 对象扩展

    属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 下面代码表明,ES6允许在对象之中,直接写变量。这时,属性名为变量名, 属