JS高程学习-第六章(一)---认识对象

认识对象

什么是对象 无序属性的集合,其属性可以包含基本值、对象或者函数 哈希表

1. 属性类型

对象在创建时都带有一些特征值 【es5 中使用属性描述了这些特性】【定义行为】

属性分为两种属性,不同的属性拥有不同的特征 数据属性访问器属性

--

数据属性: 一般我们直接定义赋值的都是数据属性
数据属性有四个描述其行为的特征:可删除,for-in可遍历,可修改,数据值
默认 : [[Configurable]] 、 [[Enumerable ]] 、 [[ Writable ]] 默认为 true

​ [[ Value ]] 默认为 undefined

在调用Object.defineProperty()方法创建一个新的属性时[描述符对象],如果不指定,configurableenumerablewritable 特性的默认值都是 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高程学习-第六章(三)---对象继承

你可能感兴趣的:(JS高程学习-第六章(一)---认识对象)