javascript 面向对象编程 聊聊对象的事


Posted in Javascript onSeptember 17, 2009

先看一下JSON(javascript object notation)对象,JSON是一种脚本操作时常用的数据交换格式对象,相对于XML来说JSON是一种比较轻量级的格式,在一些intelligence的IDE中还可以方便的通过点操作JSON对象中的成员。

      JSON是一种键/值对方式来描述内部成员的格式,其内部成员可以是几乎任何一种类型的对象,当然也可以是方法、类、数组,也可以是另外一个JSON对象。

var student = {
Name: "张三",
Age: 20,
Hobby: "读书",
Books: [
{
BookName : "C#" ,
Price : 70
},
{
BookName : "Java" ,
Price : 70
},
{
BookName : "Javascript" ,
Price : 80
}
]
};

      上面代码用JSON对象描述了一个学生的信息,他有姓名、年龄、爱好、书集等。在访问该学生对象时,可以通过student变量来操作学生的信息。

var stuInfo = "姓名:" + student.Name +
",年龄:" + student.Age +
",爱好:" + student.Hobby +
",拥有的书:" +
                      student.Books[0].BookName + "、" +
student.Books[1].BookName + "、" +
                      student.Books[2].BookName;
alert(stuInfo);

      这样的操作方式风格和C#也非常相像。以上的代码是静态的构造出了学生对象,学生对象的结构就确定了。在其它的编程语言中一般对象结构一旦确定就不能很方便的进行修改,但是在javascript中的对象结构也可以方便的进行改动。下面为student对象添加一个Introduce方法来做自我介绍。

student.Introduce = function() {
var stuInfo = "姓名:" + this.Name +
",年龄:" + this.Age +
",爱好:" + this.Hobby +
",拥有的书:" +
this.Books[0].BookName + "、" +
this.Books[1].BookName + "、" +
this.Books[2].BookName;
alert(stuInfo)
};
student.Introduce();

      student对象原来并没有Introduce方法,第一次为student.Introduce赋值会在student对象中创建一个新的成员,后面如果再为student.Introduce赋值则会覆盖上一次所赋的值。当然我们这的值是一个function。也可以用类似索引的方式来添加成员。

student["Introduce"] = function() {
……
};
 
student.Introduce();

当然添加的成员也可以删除掉。删除掉之后则成为undefined,再访问该成员时则不支持。

delete student.Introduce;
student.Introduce();
 

        javascript 面向对象编程 聊聊对象的事

        javascript是弱类型的语言,有的时候即使有IDE的辅助也不能很清楚知道当前所操作对象的成员,可能会需要对当前对象的属性进行查询,这时候我们可以使用for循环来完成。

for (var key in student) {
document.write(key + " : " + student[key] + "<br />");
};

        javascript 面向对象编程 聊聊对象的事

      对student对象进行遍历时,是对student的成员进行遍历,这里的key则对应student对象中的每一个成员属性名称。student[key]则是对student某个成员进行访问。如果想调用student的Introduce方法也可以用索引的方式,student[“Introduce”]()。

      上面简单的聊了聊JSON对象,总的来说JSON是很方便的数据打包方式。javascript中的其它的对象,不论是浏览器对象,还是自定义类型所创建的对象或者是数组等等,它们也都具有JSON对象类似的操作方式。我们可以直接用索引的方式为window添加成员,我们也可以为数组添加字符串形式的下标把它当成Hashtable来操作。

window["Hi"] = function() {
alert("helloworld!");
};
window["Hi"]();
 
var array = [];
array["一"] = "A";
array["二"] = "B";
array["三"] = "C";
array["四"] = "D";
alert(array["一"] + array["二"] + array["三"] + array["四"]);

      把数组当成Hashtable来操作时,要注意,并非是为数组添加数组元素,而是在数组对象中添加新的属性成员。而且如果for(var key in array)循环遍历数组对象的话,key得到的却不是array对象的属性名称,而是数组元素的索引号。

下一次聊聊function。

Javascript 相关文章推荐
js函数般调用正则
Apr 08 Javascript
JavaScript实现上下浮动的窗口效果代码
Oct 12 Javascript
jQuery原理系列-css选择器的简单实现
Jun 07 Javascript
json对象与数组以及转换成js对象的简单实现方法
Jun 24 Javascript
js实现常用排序算法
Aug 09 Javascript
详细讲解JavaScript中的this绑定
Oct 10 Javascript
getElementById().innerHTML与getElementById().value的区别
Oct 27 Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
Nov 15 Javascript
Angular之toDoList的实现代码示例
Dec 02 Javascript
图文讲解vue的v-if使用方法
Feb 11 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
javascript 面向对象编程 万物皆对象
Sep 17 #Javascript
javascript 面向对象编程 function也是类
Sep 17 #Javascript
类似CSDN图片切换效果脚本
Sep 17 #Javascript
var与Javascript变量隐式声明
Sep 17 #Javascript
html数组字符串拼接的最快方法
Sep 16 #Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 #Javascript
javascript 检测浏览器类型和版本的代码
Sep 15 #Javascript
You might like
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
PHP实现百度人脸识别
2019/05/06 PHP
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
react的hooks的用法详解
2020/10/12 Javascript
Python中isnumeric()方法的使用简介
2015/05/19 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
python实现在一个画布上画多个子图
2020/01/19 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
2014年冬季防火方案
2014/05/21 职场文书
武侯祠导游词
2015/02/04 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏
git中cherry-pick命令的使用教程
2022/06/25 Servers