美文网首页
对象的属性,ES5

对象的属性,ES5

作者: 白雪公主960 | 来源:发表于2018-07-01 22:23 被阅读15次

2016-09-05-day13 am



1.*****对象的属性:
ES认为对象就是属性的集合
属性分为:
命名属性:自定义的或可直接用.访问到的属性
数据属性: 直接存储属性值得属性
将每个属性都定义为四大特性:
value: 实际存储当前属性值
writable: 标识属性是否可修改
enumerable: 标识属性是否可被for in遍历到。即使改为false,依然可用.访问到
configurable: 标识能否删除属性或修改属性的其他特性
为什么: 特性是对属性的保护
configurable保护其他特性
如何访问特性:
Object.getOwnPropertyDescriptor(
obj,"属性名"
)
返回一个对象,对象中包含了属性的四大特性
如何修改属性的特性:
1. 只修改一个属性的四大特性:
Object.defineProperty(obj,"属性名",{
writable:false,
configurable:false
})
强调: 为了防止其他人再将writable改回true,可将configurable一并设置false。
configurable一旦改为false,不可逆。
2. 同时修改多个属性的四大特性:
Object.defineProperties(obj,{
属性名:{
特性名:值,
...
},
属性名:{
特性名:值,
...
}
})

 关于特性的默认值: 
 defineProperty/defineProperties,如果要修改的属性不存在,会自动添加新属性。
 但是,被defineXXX添加的新属性,所有特性默认值为false!

*****访问器属性: 不直接存储属性值,而是对其他属性提供保护的一种特殊属性。
何时: 如果使用自定义的验证规则保护属性时。
四大特性:
set:function(val){
验证val
如果验证通过,才将val赋值给受保护的数据属性
}//只要对访问器属性赋值时,自动调用访问器属性的set方法
get:function(){
return 受保护的数据属性的值
}//只要使用访问器属性取值时,自动调用访问器属性的get方法
enumerable: 同数据属性
configurable: 同数据属性
如何定义:
都用defineProperty/defineProperties

内部属性:不建议或不允许访问的属性

pm



  1. ES5:
    对象的属性
    Object.create
    数组API
    *****函数的bind()
    严格模式

1.对象的属性:
命名属性:
数据属性:
访问器属性:
核心问题: 实际属性值存在哪儿?
解决: 使用闭包,封装一个受保护的局部变量。

内部属性:
比如: proto class
extensible: 标识一个对象是否可扩展新属性。默认值true。

防篡改: 限制对已经创建的对象中的属性进行重新配置。
为什么: 严格的语言中,要求对象一旦创建,属性不允许擅自增减。
何时: 今后,只要不允许对已经创建的对象的属性进行添加和删除操作时。
如何: 3个级别:

  1. 防扩展: 禁止向对象中添加新属性
    判断一个对象是否可扩展:
    Object.isExtensible(obj)
    设置一个对象不可扩展:
    Object.preventExtensions(obj)
    相当于修改obj的extensible为false

  2. 密封: 在兼具防扩展的基础上,进一步禁止删除对象中的属性
    判断当前对象是否密封:
    Object.isSealed(obj);
    修改当前对象为密封
    Object.seal(obj);
    相当于:修改obj的extensible为false
    将所有属性的configurable特性都改为false。

  3. 冻结: 在兼具密封的基础上,进一步禁止修改所有属性的值
    何时: 只要希望一个对象中的属性值一旦创建,不可改变时,就要冻结对象——
    判断一个对象是否被冻结:
    Object.isFrozen(obj)
    冻结一个对象:
    Object.freeze(obj)

  4. Object.create()
    设置继承有几种方法:
    1.Object.setPrototypeOf(child,father)
    2.构造函数.prototype
    3.两种类型间的继承:
    抽象父类型
    借用构造函数
    设置子类型原型继承父类型元素
    4.创建一个新对象,继承父对象,并扩展自有属性。
    如何:
    var child=Object.create(father,{
    新属性:{
    四大特性
    },
    新属性:{
    四大特性
    }
    })

3.数组API:

  1. 判断数组中每个元素是否符合要求:
    arr.every():判断数组中每个元素是否都符合指定规则的要求。
    arr.some():判断数组中是否包含符合指定规则的元素。
    如何使用:
    arr.every(function(val,idx,arr){
    return 判断条件
    })

  2. 遍历API:

  3. 过滤和汇总:

相关文章

  • 对象的getter与setter

    在ES5以前,读/写对象的属性时,产生的结果就是返回了对象属性的值/设置了对象属性的值。在ES5之后,对于用get...

  • es6 对象 笔记

    创建对象 es5 es6 对象的key 对象属性的缩写 对象的动态属性名 对象属性的get()和set() 对象的...

  • 对象的属性,ES5

    2016-09-05-day13 am 1.*****对象的属性:ES认为对象就是属性的集合属性分为:命名属性:自...

  • 顶层对象属性与全局变量

    顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与...

  • (阮一峰)顶层对象的属性

    顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与...

  • ES6 对象扩展

    一、对象属性的简洁写法1、属性简写 2、方法简写 二、属性名表达式在ES5中,定义对象的属性有两种方法 如果使用字...

  • ES6 Symbol

    1.概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突。尤其是在使用他人提供的对象时,为对象添加属性,可...

  • js顶层对象的属性

    顶层对象,在浏览器环境指的是window对象,在Node指的是global对象。ES5之中,顶层对象的属性与全局变...

  • ES6 Symbol

    为啥需要 Symbol ES5 里面对象的属性名都是字符串,如果你需要使用人提供的对象,你对这个对象有哪些属性也不...

  • 对象的getter与setter

    index 对象的getter与setter __veblen 在ES5以前,读/写对象的属性时,产生的结果就是返...

网友评论

      本文标题:对象的属性,ES5

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