首页 > 网站 > WEB开发 > 正文

JavaScript系列-----对象基于哈希存储(<Key,Value>之Value篇) (3)

2024-04-27 14:13:43
字体:
来源:转载
供稿:网友

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中,对象的属性是以键值对的形式存储的,那么我们知道必须需要知道对象属性的三种类型:

    1. 基本数据类型的属性
    2. 引用数据类型的属性
    3. 数据访问器属性

我们用一个例子来分别说明这三种属性类型:

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);                   //输出结果:
configurabletrue
enumerable true
value "张三"
writable true

(2).引用数据类型的属性

var person = {};person.getName = function () {  return this.name;}person.child={name:"张四"};var descriptor = Object.getOwnPropertyDescriptor(person, 'getName');console.log(descriptor);                           //输出结果:
configurabletrue
enumerabletrue
writabletrue
valuefunction()
var descriptor1 = Object.getOwnPropertyDescriptor(person, 'child');console.log(descriptor1);                         //输出结果:                          
configurabletrue
enumerable true
valueObject { name="张四"}
writable true

(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);                            //输出结果:
configurablefalse
enumerablefalse
setundefined

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表