ES6深入浅出-5 新版对象-2.属性修饰符

对象语法增强

已经有了个对象的新增语法 还需要一个api来做呢?、

因为有的时候,你需要在旧的对象上添加get、set。

读的时候就走get 写的时候就走set

假设很早之前在项目里写了一个old对象,它的属性都是写好的,现在想给oldObject加get、set。没有办法再去重新定义它

这个api是给已经定好的对象,来不及再去重新定义的对象修改属性,

这样就可以设置oldObject的值为1. 但是set方法里面什么也没做。所以输出oldObject.x的值为undefined

这个api还有其他的功能,这些功能都是js的坑造成的
undefined是不是关键字呢?

如果一个东西是关键字,就没有办法声明同样的变量,function是个关键字,所以你没有办法声明一个关键字是function

同样的this也是一个关键字

可以声明变量undefined。所以undefined不是关键字。

null也事关键字不可以声明。

undefined是只读的变量,所以上面把undefined设置为1 没有设置成功。

常量a,设置a的值就会报错。

由此我们可以推断。undefined不是一个常量,因为我们可以给它赋值
如果undefined是变量的话 给它赋值,值却不变。所以它是不可改变值的变量。

所有的全局变量都是window上的属性而已。所以我们把undefined叫做window的只读属性。

这样就可以确定undefined是window的一个属性。xxxx不是。


是只读的,无法改变。

使用Object.defineProperty

name是一个函数,所以这里显示的是三个点,name2确实是一个属性。这个只读是通过函数来控制的没有set 

o不是真正意义上的有name这个属性,去取它的name的时候,还是看get name

给name2定义一个初始值,用get做成只读的方式。

查看o对象,只看到name2,name是一个函数,并没有name这个可以

name2确确实实的是存在的属性,只不过不能赋值。


configurable

定义age属性不可写

engine设置为不可写

把属性又改成可写的

让属性的可读属性不可修改。configurable是否可再次配置设置为false。


想再改成可写的。就会报错。configurable设置为false后,就不能再去做任何的修改了。

已经关闭了就不能再去修改了。

unumerable


打印o的三个key

toString也是o的key

有些属性是可以被遍历到的,有些属性不可以被遍历到。toString就没有被遍历到。

a是有length但是没有被遍历到。

enumerable属性的意思就是当前属性在遍历的时候是否被展示出来。
定义b的属性,设置为不可遍历。那么遍历出来的是a和c

实际上acb都是有的

enumerable的作用,以数组为例
回去a的属性length的属性描述。

a的0属性 就是可遍历的

可以放心的数组上添加属性,同时不影响以前的代码。下面是增加了name的属性但是循环的时候不想name被循环出来。

一次定义多个属性-defineProperties


如果你想过这样的代码,请问Vue里面是如何做到data和页面上的message双向绑定的

vue的文档里面会提到一个重要的API就是defineProperties

symbol当对象的key



怎么知道一个对象有哪些key。返回的是空的

要用另外的一个api。如果要想获取到一个对象是否有symbol的key必须用getOwnPropertySymbol


用o去读取第0个symbol

总结


一个是设置,一个是获取。

ES6关于对象的所有新增的语法APi就讲完了

结束

很多人已经开始用reasonML。reasonML一门新的前端语言。

原文地址:https://www.cnblogs.com/wangjunwei/p/11827314.html

时间: 2024-11-02 16:03:22

ES6深入浅出-5 新版对象-2.属性修饰符的相关文章

ES6深入浅出-5 新版对象-1.如何创建对象

对象属性的加强: 可以通过new Object(), Object.create()方法,或者使用字面量标记(初始化标记)初始化对象. 一个对象初始化器,由花括号/大括号 ({}) 包含的一个由零个或多个对象属性名和其关联值组成的一个逗号分隔的列表构成. 上面那句话说的是如何产生一个新的对象. 下面代码.a就是一个空对象, 空对象只有一个属性.那就是_proto_ 使用object.create去创建对象,需要传个参数,这里传null.就真的是一个空对象了,里面什么都没有 Object.crea

iOS 属性修饰符记录 --不定时更新

重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰: #import <UIKit/UIKit.h> @interface MyView : UIView @property(nonatomic, retain) NSMUtableArray* data; @end 在对应的setter方法中,会以如下代码实现: if (_data != new

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式、auto_ptr与单例模式、const成员函数、const 对象、mutable修饰符

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式.auto_ptr与单例模式.const成员函数.const 对象.mutable修饰符 前言 [例]写出面向对象的五个基本原则? 解答:单一职责原则,开放封闭原则,依赖倒置原则,接口隔离原则和里氏替换原则 里氏替换原则:子类型必须能够替换他们的基类型. 设计模式分为三种类型:创建型模式.结构型模式和行为型模式 一.static 与单例模式 1.单例模式 单例模式的意图:保证一个类仅有一个实例,并提供一个访问它

OC 属性修饰符篇

一.MRC 与 ARC 各自的属性修饰符 1 // 属性修饰符按代码规范的顺序 2 // 是否原子操作.是否可读写.内存管理 3 @property (nonatomic, readwrite, copy) NSString *str; 4 // PS:属性修饰符顺序并没有硬性规定. 二.内存管理修饰符 MRC 模式下属性修饰符 retain: 引用计数加1. assign: 分配内存,类似于copy.常用于基本数据类型,比如:int,long,NSInteger等. ARC 模式下属性修饰符

iOS 属性修饰符的区别

前言iOS5 之前 所有的 开发都需要开发者自己控制自己的对象的引用和释放.使用的修饰符是 assign.copy.retain iOS5 之后,Apple 推出了ARC(自动引用计数)机制,推出了新的修饰符替代之前的修饰符 strong.weak 简单说明1:ARC环境下,strong代替retain.weak代替assign2:weak的作用:在ARC环境下,,所有指向这个对象的weak指针都将被置为nil.这个T特性很有用,相信很多开发者都被指针指向已释放的对象所造成的EXC_BAD_AC

C# 常用对象的的修饰符

class(类) 1.internal 表示类只能在当然程序集中访问,类默认修饰符 2.public 表示所有地方都可以访问,与internal是互斥的 3.abstract 抽象类,不能被实例化,只能继承 4.sealed 密封类,不能被继承,与astract是互斥的 interface(接口) 1.public 表示所有的地方都可以访问,接口默认修饰符 2.internal 表只能在当然程序集只访问 注:接口不能用abstract与sealed,这对接口来说,没有意义 类的成员(字段,方法,

ES6深入浅出-2 新版函数:4 迭代器与生成器-1.字面量增强

今天的内容 字面量literal 写出来就是它的值 例如字符串hello.这就是自变量. 一个空对象,也是自变量 写出来就是代表它写出来的那个意思就是自变量. 与其相反的就是构造出来的.例如下面的new Object()就不是自变量. 非自变量就是构造出来的量 二进制 以前的二进制是怎么写的呢 以前的二进制基本没有什么用 十进制没有十 八进制没有八 二进制,是以0b开头的 es6新语法,以0b开头的是二进制.0o开头的是八进制 在es5里面0777代表是八进制. 新版的语法知识更好的理解而已.

ES6深入浅出-2 新版函数:4 迭代器与生成器-3.生成器 &amp; for...of

迭代器平时用的很少.但是如果你是写框架的,你会经常用到迭代器. 生成器是专门用来做迭代器的东西 发布器是要产生一个叫做next的对象,如果你要产生这种对象.就可以使用ES6新出的语法. ES6的新语法 星号放在哪里都可以,甚至打空格可以了. 这样写也行 这样写也行 while(true)是一个死循环.这是一个ES6的语法糖 function*是什么 yield是什么鬼?ES6难理解,就是你永远用不到的东西,在这个基础之上又加了一个你永远用不到的东西. 可以移植运行a.next()理论上不会结束.

ES6深入浅出-7 新版的类(上集)-1.介绍原型

ES6新出的关键class BE受雇与网景开发了JS 当我们在写一个对象的时候,我们实际上内存的形式表示. obj等于一个空对象,可以直接toString.它为什么可以有toString window是一个全局的对象. window下有个object的属性. 通过window.Object.prototype找到了toString 为了方便理解,当说原型的时候 先理解为共用属性. toString是很多对象的共用属性. 当谢var obj为一个空对象的时候,为什么可以获取到toString的方法