美文网首页
创建对象及属性修饰

创建对象及属性修饰

作者: 我也不知道啊丶 | 来源:发表于2018-12-18 17:45 被阅读0次

对象初始化方法:

ES5方法:

生成了一个空对象,具有__proto__属性

字面量方法:


等价于 new Object()

ES6方法:

生成了一个真正的空对象,没有任何属性,生成时必须传入参数

使用ES6的Object.create(Object.prototype)方法,可以生成跟ES5方法一样的具有proto属性的对象

传入Object.prototype参数

对象的缩写:


可以缩写成:
key和val相同可以简写

对象中使用变量(动态属性名):

ES5方法:


ES6方法:
初始化对象时直接使用 [ 变量 ] 把变量放在里面

方法定义


读取obj.age时相当于访问了get age(),
设置obj.age时相当于访问了set age()

利用这个方法,可以解一道经典的算法题
a === 1 && a === 2 && a === 3 // true


Object.defineProperty(obj, prop, descriptor)方法(属性修饰),
obj 要在其上定义属性的对象,
prop 要定义或修改属性的名称,
descriptor 将被定义或修改的属性描述符
MDN详细资料

计算属性名

属性名可以有复杂的计算

拓展属性

复制对象上的属性,如果直接用一个对象等于另外一个对象,实际上只是共用了一个对象属性的地址,两个对象完全相等,改变其中一个对象属性的值,另外一个对象也会跟着改变:


想要实现两个对象不相等且互不影响,可以用for in循环的方法:


当然,有简单一点的方法:
Object.assign()
Object.assign()相当于for in 循环了
奇怪的ES6还提供了一个更简洁的方法:
... 相当于全部拷贝

所以ES6可以有让人眼花缭乱的对象创建方法:

变更原型

我们知道,每个对象都有一个__proto__的值,但是ES6规定不要自己去访问


实际上a.__proto___ === Object.prototype

如果我们想改变一下a的隐藏属性,可以
可以看到,此时 a的__proto__已经等于b
这个关系就叫做:ba 的原型
现在a可以访问b上面的所有属性了,但是我们并没有在a上面定义任何属性
ES6规定不要用__proto__方法去访问对象的原型,但是提供了一个方法:
Object.getPrototypeOf(a)
虽然感觉很莫名其妙

undefined是只读的变量

undefined居然不是一个关键字???
undefined的本质是window的一个只读属性
相当于:
因为只有get方法,所以不能更改undefined的值
如果想设置一个只读的属性,可以使用writable:false

两者的区别是:


objname2这个属性,值是undefined
但是obj不是真的有name这个属性,因为每次访问obj.name实际上是在访问obj.get name()这个函数,由这个函数抛出一个name = jack
也可以给name2设置一个默认值:
name2的默认值是aaa

当对象设置了writable:false时,属性是只读的,但是可以通过修改writable:true让其可以修改

writable:true

如果给对象设置一个configurable : false,那么就不能再做出任何更改

设置了configurable : false,如果再修改会直接报错
再修改configurable : true也不行,此时已经不能对objage属性做任何修改

enumerable
当前属性是否需要在遍历的时候展示出来,
当且仅当该属性的enumerabletrue时,才能遍历


可以看到,对象o中是有toString属性的,但是遍历的时候没有打印出来

数组a有length属性,但是遍历的时候同样也没有打印出来

现在来设置一下一下enumerable

给对象a的b属性设置了enumerable:false,所以b属性不会出现在遍历中
相反:
给对象a的b属性设置了enumerable:true,所以b属性会出现在遍历中

使用Obj.getOwnPropertyDescriptor(对象,属性名) // 对象属性描述器来查看a.length

此时给a增加一个属性

name被遍历出来了
使用上面的api来配置一下:
name没有被遍历了,且不能再更改它的值和配置

使用Object.defineProperties()方法,可以一次给对象配置多个属性:

相关文章

  • 创建对象及属性修饰

    对象初始化方法: ES5方法: 字面量方法: ES6方法: 使用ES6的Object.create(Object....

  • Java_总结

    1.static:修饰的属性、方法都会在对象创建之前有优先加载: 修饰的属性:静态属性 修饰的方法:静态方法(类方...

  • 第三章③this关键字

    用途: 修饰属性、方法、构造器 理解: this为当前对象,或正在创建的对象 可以通过【this(形参)】的方式调...

  • Javascript arguments对象详解

    今天我们来看看arguments对象及属性。arguments对象不能显式创建,arguments对象只有函数开始...

  • this关键字

    /* this: 1.可以用来修饰属性、方法、构造器 2.this理解为当前对象或当前正在创建的对象.比如:thi...

  • JS创建对象及对象属性获取

    组合方式创建对象 除了常用的创建单个对象的方式外,我们希望批量创建对象时,一般采用组合方式来创建对象。下面是具体的...

  • Java反射之二:实例化对象、接口与父类、修饰符和属性

    这次是之二:实例化对象、接口与父类、修饰符和属性。 实例化对象 之前我们讲解过创建对象的方式,有new 、克隆、反...

  • 笔记6 java(2)

    static关键字 为了实现对象之间重复属性的数据共享 修饰成员变量 调用方式:1.类名直接调用2.创建对象访问 ...

  • Property copy

    概念 Property修饰关键字copy 创建一个引用计数为1的一个对象,释放旧对象,然后赋值,此属性只对那...

  • Dart语法面向对象之1

    面向对象之1 概述 类与对象,声明、创建及基本特性构造方法及初始化列表静态成员及对象操作符的使用 类 属性与方法 ...

网友评论

      本文标题:创建对象及属性修饰

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