热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS进修笔记(第6章)(面向对象的程序设计之明白对象)

明白对象1、建立自定义对象的两种要领:(1)建立一个Object实例,然后再为它增加属性和要领。varpersonnewObject();person.nameNicholas;p

明白对象

1、建立自定义对象的两种要领:

(1)建立一个Object实例,然后再为它增加属性和要领。

var person = new Object();
person.name = "Nicholas";
person.age = 29;
person.job = "Software Engineer";
person.sayName = function() {
alert(this.name);
};

(2)用对象字面量语法建立 (属性名或要领名 : 值)

var person = {
name : "Nicholas",
age : 29,
job : "Software Engineer",
sayName : function() {
alert (this.name);
}
};

2、属性范例

ECMAScript中有两种属性:数据属性和接见器属性。
(1)数据属性:数据属性包括一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个形貌其行动的特征:

1)[[Configurable]]:示意可以经由过程delect删除属性从而从新定义属性,可否修正属性的特征,或许可否把属性修正为接见器属性;
2)[[Enumerable]]:示意可否经由过程for-in轮回返回属性;
3)[[Writable]]:示意可否修正属性的值;
4)[[Value]]:包括这个属性的数据值。读取属性值的时刻,从这个位置读;写入属性的时刻,把新值保留在这个位置。
修正属性默许的特征,必需运用ECMAScript5的Object.defineProperty()要领。这个要领吸收三个参数:属性地点的对象、属性的名字和一个形貌符对象。个中,形貌符对象的属性必需是configurable、enumerable、writable和value。设置个中的一个或多个值,可以修正对应的特征值。

var person = {};
Object.defineProperty(person, "name", {
writable : false,
value : "Nicholas"
});
alert(person.name); //"Nicholas"
person.name = "Greg";
alert(person.name); //"Nicholas"

本例中将name属性的write值设置为false示意只可读不可写。吧configurable设置为false,示意不能从对象中删除属性。一旦把属性定义为不可设置的,就不能再把它变回可设置了。
注重:在挪用Object.defineProperty()要领建立一个新的属性时,假如不指定,configurable、enumerable和writable特征的默许值都是false。
(2)接见器属性
接见器属性不包括数据值:它们包括一对儿getter和setter函数。在读取接见器属性时,会挪用getter函数,这个函数担任返回有用的值;在写入接见器属性时,会挪用setter函数并传入新值,这个函数担任决议怎样让处置惩罚数据。接见器属性有以下4个特征:

1)[[Configurable]]:示意可以经由过程delect删除属性从而从新定义属性,可否修正属性的特征,或许可否把属性修正为数据属性;
2)[[Enumerable]]:示意可否经由过程for-in轮回返回属性;
3)[[Get]]:在读取属性时挪用的函数。默许值为Undefined。
4)[[Set]]:在写入属性时挪用的函数。默许值为Undefined。

接见器属性不能直接定义,必需运用Object.defineProperty()来定义。

object.defineProperty(book,"year", {
ger : function() {
return this._year;
},
set : function(newValue) {
if(newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005;
alert(book.edition); //2

_year前面的下划线是一种经常使用的暗号,用于示意只能经由过程对象要领接见的属性。

3、定义多个属性

Object.defineProperties()要领。应用这个要领可以经由过程形貌符一次定义多个属性。这个要领吸收两个对象参数:要增加和修正其属性值的对象,第二个是与第一个对象中要增加和修正的属性值一一对应。

var book = {};
Object.defineProperties(book, {
_year: {
writable : true,
value : 2004
},
edition: {
writable: true,
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if(newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});

以上代码在book对象上定义了两个数据属性(_year和edition)和一个接见器属性(year)。

4、读取属性的特征

Object.getOwnPropertyDescriptor()要领,可以去的给定属性的形貌符。这个要领吸收两个参数:属性地点的对象和要读取其形貌符的属性称号,返回值是一个对象。
假如是接见器属性,这个对象的属性有configurable、 enumerable、get和set;
假如是数据属性,这个对象的属性有configurable、enumerable、writable和value。

var book = {};
Object.defineProperties(book, {
_year: {
writable : true,
value : 2004
},
edition: {
writable: true,
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if(newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
alert(descriptor.value); //2004
alert(descriptor.configurable); //false
alter(typeof descriptor.get); //undefined
var descriptor = Object.getOwnPropertyDescriptor(book, "year");
alert(descriptor.value); //undefined
alert(descriptor.enumerable); //false
alert(typeof descriptor.get); //"function"

推荐阅读
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
author-avatar
如痴如醉as_961
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有