今天我们来学习对象,是为了后面的面向对象开发做准备的。
先来复习一下怎么创建对象吧:
一般我们都是选择第一种字面量来创建对象的,我也是推荐这种方便的方式。
这篇文章将带你认识不一样的对象,去学习对象上的方法:
一、Object.assign() 将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
这个方法可以用在浅拷贝上,方法的第一个参数是目标参数,后面的参数是源对象,如果有重复的,将替换成最新的。
二、getOwnPropertyDescriptor() 返回指定对象上一个自有属性对应的属性描述符。
上面的分别是对象属性对应的属性描述符,分别有对象是否可以重新配置,对象的默认值,对象是否可以枚举,对象是否可写,不可写就是只读对象。
与之对应的有下面这个方法,可以定义一个对象的属性。
三、Object.defineProperty() 直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
这个方法有两个很重要的方法get和set,后面我再来阐述。
四、Object.preventExtensions() 让一个对象变的不可扩展,也就是永远不能再添加新的属性。
用法很简单,就不阐述了。
五、Object.seal() 封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要原来是可写的就可以改变。
当封闭对象后,对象里的get就不能再操作对象了。
六、Object.freeze() 可以冻结一个对象,对象不能再被修改,不能添加和删除属性,不能修改原始属性描述符,也不能修改对象原型。
这个方法和上面的Object.seal()差不多,重要的是原型上的方法的属性也是不能修改的。
现在我们再回头来看看get和set。
obj.a是一次属性访问,对象内置的get会在对象查找属性,没有就查找原型链,没有就返回undefind,对象默认有Getter和Setter,get是每当访问对象属性触发,set是监视对象的变化。
我们就从几道题来理解get和set吧。
怎么让这段代码打印成功呢,其实就可以用到Object.defineProperty()的get。
这个就是每次访问到a的时候,触发一次get,就让这段看似不合理的代码运行成功了。
再来看一道题:
这里重要的是用到了writable这个属性描述符,当条件不满足时,就是false,不可再更改了。还有一个for...in,for..in 循环可以用来遍历对象的可枚举属性列表包括原型链。
最后再利用getter和setter作一个数据的代理案例。
好了,今天的分享就到这里了。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!