认识对象
什么是对象 无序属性的集合,其属性可以包含基本值、对象或者函数
哈希表
1. 属性类型
对象在创建时都带有一些特征值 【es5 中使用属性描述了这些特性】【定义行为】
属性分为两种属性,不同的属性拥有不同的特征 数据属性
,访问器属性
--
数据属性
: 一般我们直接定义赋值的都是数据属性
数据属性有四个描述其行为的特征:可删除,for-in可遍历,可修改,数据值
默认 : [[Configurable
]] 、 [[Enumerable
]] 、 [[ Writable
]] 默认为 true
[[ Value
]] 默认为 undefined
在调用Object.defineProperty()
方法创建一个新的属性时[描述符对象],如果不指定,configurable
、enumerable
、writable
特性的默认值都是 false
//普通的属性 赋值 读取
var a = {'b':'c'}
a.b = 20;
// 内部属性 赋值读取
// 有一些内置属性具有指定的特征
// Math.PI 此值就不可以修改
Math.PI = 10
// 修改特征
var obj = {};
// 三个参数 属性所在的对象 ,属性的名字 和 一个描述符对象
Object.defineProperty(obj, 'name', {
writable: false, // 不能修改值
value: '张三'
})
console.log(obj.name); // 张三
obj.name = '李四';
console.log(obj.name); // 张三, writable设为 false 后,值就没法修改了。
var person = {
name: '李四',
age: 24
}
delete person.name;
console.log(person); // {age: 24}
Object.defineProperty(person, 'age', {
configurable: false
})
delete person.age;
console.log(person);// {age: 24} configurable特性设为 false 后,就没法使用 delete 删除了。
访问器属性
: 包含一对 getter setter 函数 (都不是必须
的) 。允许用户在赋值或取值都经过预先设定的函数,从而实现内部属性的那一种特殊效果。
同样具有四个特征;
可删除,可遍历,get时调用的函数,set时调用的函数
var book = {
_year : 2004,//_year前面下划线是常用的记号,表示只能通过对象方法访问的属性
edition : 1
};
// year 就是访问器属性
Object.defineProperty(book,"year",{
get : function () {
return this._year;
},
set : function (newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year 即调用 get 方法 赋值的时候 就调用 set 方法
// 我们当前的 vue 就是使用这个方法,来保证 数据双向绑定
2.定义多个属性
Object.defineProperties()
可以通过描述符一个定义多个属性。
// 接收两个参数 添加属性的对象 包含多个需要添加和修改的属性的对象
Object.defineProperty(book,{
"year":{
get : function () {
return this._year;
},
set : function (newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
},
"name":{
value:10
}
});
3.读取属性的特性
getOwnPropertyDescriptor
学习整理
JS高程学习-第六章(一)---认识对象
JS高程学习-第六章(二)---创建对象
JS高程学习-第六章(三)---对象继承