javaScript系列-----对象基于哈希存储(<Key,Value>之Value篇) (3)
Javascript系列-----Objectj基于哈希存储<Key,Value>之Value
1.问题提出
在JavaScript系列-----Object之基于Hash<Key,Value>存储之Key篇 (1)中,我们推理出:对象是以Hash结构存储的,对象的属性被表示为多个<Key,Value>键值对。
其中,Key的数据类型是字符串,但是,我们并没有说Value是以什么数据结构存储的,在本文中,我们将继续讨论:Value的存储类型-----博文的核心
既然在JavaScript中,对象的属性是以键值对的形式存储的,那么我们知道必须需要知道对象属性的三种类型:
- 基本数据类型的属性
- 引用数据类型的属性
- 数据访问器属性
我们用一个例子来分别说明这三种属性类型:
var person = {};person.name = '张三'; //第一种,基本数据类型属性person.age = 18;peron.getName = function () { //第二种,引用数据类型的属性,因为在js中函数也是对象 return this.name;}Object.definePRoperty(person, 'isAdult', { //第三种,访问器属性 get: function () { if (person.age >= 18) { return true; } else { return false; } }});console.log(person.isAdult); //true
通过上例,我们认识到三种属性类型后,那么,接下来我们来谈谈Value是怎么表示这三种属性的!
2.<Key,Value>中Value的数据结构
在JavaScript高级程序设计(第三版)中,是这么描素属性的:属性在创建时都带有一些特征值,JavaScript引擎通过这些特征值来定义他们的行为。
下面,分别讨论这三种属性分别用哪些特征值来描述:
(1).基本数据类型的属性
var person = {};person.name = '张三';var descriptor=Object.getOwnPropertyDescriptor(person,"name");console.log(descriptor); //输出结果:
(2).引用数据类型的属性
var person = {};person.getName = function () { return this.name;}person.child={name:"张四"};var descriptor = Object.getOwnPropertyDescriptor(person, 'getName');console.log(descriptor); //输出结果:
var descriptor1 = Object.getOwnPropertyDescriptor(person, 'child');console.log(descriptor1); //输出结果:
(3).访问器类型的属性
var person = {};Object.defineProperty(person, 'isAdult', { get: function () { if (person.age >= 18) { return true; } else { return false; } }});var descriptor=Object.getOwnPropertyDescriptor(person,"isAdult");console.log(descriptor); //输出结果: