美文网首页
你真的了解对象扩展运算吗

你真的了解对象扩展运算吗

作者: 求知久久编程学院 | 来源:发表于2018-11-01 19:42 被阅读26次

转载于免费视频网:www.rails365.net

拓展运算符用的比较多,他的特性有哪些呢?

代码是最直观的了。

basic example

const man = {
  name: 'xhs',
  age: 18
}

const company = {
  name: 'pinee',
  depart: {
    name: 'dev'
  }
}

example1

Object.defineProperty(man, 'sex', {
    value: 'nan',
    writable: true,
    configurable: true
})
man //{name: "xhs", age: 18, sex: "nan"}
{...man} //{name: "xhs", age: 18}

由上面可以发现 扩展运算符不支持enumerable: false的属性

const man2 = Object.create(man, {  
  gf: {
    value: 'lucia',
    enumerable: true
  }
});
man2 //{gf: "lucia"}
man2.name // xhs
man2.hasOwnProperty('name') // false
man2.hasOwnProperty('gf') // true

const man3 = {...man2}
man3 // {gf: "lucia"}

由上面可以发现,扩展运算符只会显示出自有的属性,不会展示继承的属性

example3

const company2 = {...company}
company2 === company // false
company2.depart === company.depart // true

可以发现,嵌套的引用的是一个对象。因为 他是一个浅拷贝,只克隆对象本身,不会拷贝嵌套实例。

当然,也可以嵌套解决

c3 = {...company, depart: {...company.depart}}
c3.depart === company.depart //false

example4

class Bar {
    constructor(){
        this.name = 'bar-name'
        this.age = 18
    }

    info() {
      return `name is ${this.name}, age is ${this.age}`
    }
}
const b = new Bar
b.name // bar-name
b.info() // "name is bar-name, age is 18"
Bar.prototype.info() // "name is bar-name, age is 18"
b.constructor.name // Bar

b2 = {...b}
b2.name // 'bar-name'
b2.info() //error
b2.constructor // Object

可以发现,扩展运算符存在原型属性丢失的情况
因为b的构造函数是Bar, b2的构造函数是Object, info是存在Bar的原型的对象上。

  • 扩展运算符不会扩展enumerable: false的属性.
  • 只会扩展自有属性,不会扩展继承的属性
  • 他是一个浅拷贝
  • 原型属性丢失

原文请点击此处查看

相关文章

  • 你真的了解对象扩展运算吗

    转载于免费视频网:www.rails365.net 拓展运算符用的比较多,他的特性有哪些呢? 代码是最直观的了。 ...

  • 解构赋值,函数扩展默认值

    扩展运算符 对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。 对象的扩展运算符等同...

  • es6之扩展运算符 三个点(...)

    es6之扩展运算符 三个点(...)对象的扩展运算符数组的扩展运算符总结es6之扩展运算符 三个点(…)对象的扩展...

  • ES6之解构赋值/剩余运算符/箭头函数

    扩展运算符(对象) 扩展运算符(数组) 扩展运算符和Object.assign对对象进行合并的行为,是属于浅拷贝 ...

  • ES6之扩展运算符-对象

    Spread扩展运算符 (1) 复制对象(深拷贝) 拷贝了对象实例的属性对象的扩展运算符(...)用于取出参数对象...

  • es6之扩展运算符 三个点(...)

    对象的扩展运算符 理解对象的扩展运算符其实很简单,只要记住一句话就可以: 对象中的扩展运算符(...)用于取出参数...

  • ES6(八)迭代器与生成器3

    1.扩展运算符与非数组的可迭代对象 2.传递参数给迭代器 扩展运算符与非数组的可迭代对象 扩展运算符( ... )...

  • ES6新增特性(二)

    ES6 的内置对象扩展 Array 的扩展方法 一、Array 的扩展方法 1. 扩展运算符(展开语法) 扩展运算...

  • es6之扩展运算符 三个点(...)

    es6之扩展运算符 三个点(…) 对象的扩展运算符理解对象的扩展运算符其实很简单,只要记住一句话就可以:对象中的扩...

  • 内置对象扩展(Array)

    Array 的扩展方法 扩展运算符(展开语法) 扩展运算符可以将数组或者对象转为用逗号分隔的参数序列 扩展运算符可...

网友评论

      本文标题:你真的了解对象扩展运算吗

      本文链接:https://www.haomeiwen.com/subject/rxqfxqtx.html