JavaScript语言是动态类型的语言,基于对象并由事件驱动。用面向对象的思想来看,它也有类的概念。JavaScript 没有class关键字,就是用function来实现。

1. 实现方式及变量/方法访问域控制

1 function fruit(name, color)
2 {
3     // public variable
4     this.name = name;
5     this.color = color;
6 }

用this来标识变量或方法是public。

1 var apple = new fruit('apple', 'red');

跟其他大多数语言一样是用 new 关键字来实例化一个类的对象。这样 apple.name 的值就是 ‘apple'。内部变量则使用var关键字:

1 function book()
2 {
3     var subject = "welcome to nowamagic.net";   
4 }
5 var b1 = new book();

这个时候访问b1.subject,得到的结果是"undefined"。

2. 类的扩展

JavaScript是动态语言,因此我们可以在类创建之后再给他添加属性(field)或方法。具体做法就是使用prototype:

01 function fruit(name, color)
02 {
03     // public variable
04     this.name = name;
05     this.color = color;
06 }
07 var apple = new fruit('apple', 'red');
08 var orange = new fruit('orange', 'yellow');
09 //apple.gender = 'undefined'
10 fruit.prototype.gender=1;
11 //apple.gender = 1
12 //orange.gender = 1
13 //fruit.prototype.gender = 1

可以看到变量apple, orange都有了gender的属性,且值为1。

也有人把prototype扩展的内容称之为静态方法或属性,我认为这样称呼有些不太合适,因为静态的内容是不能通过对象来访问的,这里则可以,且如果更改apple.gender,不会影响orange.gender的值。另一个理由这里的gender不能像其他语言的静态属性一样直接是用类名来访问:

1 apple.gender = 1   //error : student.gender undefined

只能这样:

1 fruit.prototype.gender    // 值为 1

3. 对象与数组的关系

1 var tom = {};
2 //typeof(tom)  //object
3 tom['Email']='qq@qq.com';
4 // tom.Email  值为 'qq@qq.com'
5 tom.Website="www.nowamagic.net";
6 // tom["Website"] 值为 "www.nowamagic.net"

由此可以见对象的field可以通过数组的方式访问,反之亦然。使用field的方式访问,从风格上讲更像面向对象的风格,但是是用数组方位在某些遍历对象的时候很是方便。

简述JavaScript的类与对象的更多相关文章

  1. Javascript创建类和对象

    现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = ...

  2. 扩展javascript扩展(类,对象,原型)

     扩展javascript扩展(类,对象,原型)

  3. javascript:类数组 -- 对象

    在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象  的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ...

  4. 【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链

    JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承. 类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply ...

  5. 我所了解的关于JavaScript定义类和对象的几种方式

    原文:http://www.cnblogs.com/hongru/archive/2010/11/08/1871359.html 在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hois ...

  6. JavaScript定义类与对象的一些方法

    最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...

  7. Javascript基础--类与对象(五)

    js面向(基于)对象编程1.澄清概念 1.1 js中基于对象 == js 面向对象 1.2 js中没有类class,但是它取了一个新的名字,交原型对象,因此 类 = 原型对象. 2.为什么需要对象? ...

  8. javascript定义类或对象的方式

    本文介绍的几种定义类或对象的方式中,目前使用最广泛的是:混合的构造函数/原型方式.动态原型方式.不要单独使用经典的构造函数或原型方式. 工厂方式 构造器函数 原型方式 混合的构造函数/原型方式 动态原 ...

  9. JavaScript自定义类和对象的方法

    备注:JavaScript中没有类class的概念,一般把原型对象看作类 1. 工厂方法--使用new Object创建对象并添加相关属性 var Obj = new Object;         ...

随机推荐

  1. python切片技巧

    写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz” for x in range(101): p ...

  2. HDU - 6444(单调队列+思维)

    链接:HDU - 6444 题意:给出一个包含 n 个数的环,每个数都有一个价值,起点任选,每次跳顺时针跳 k 个数,在哪个数就能获得该价值(包括起点),最多取 m 次,问最少需要补充多少价值,所拿的 ...

  3. 【cover-view、cover-image】 覆盖组件说明

    cover-view.cover-image 这两类覆盖组件用于显示在一些特殊组件上方(map.video.canvas.camera.live-player.live-pusher). 这类组件一般 ...

  4. 从零开始的Python学习Episode 6——字符串操作

    字符串操作 一.输出重复字符串 print('smile'*6) #输出6个smile 二.通过引索输出部分字符串 print('smile'[1:]) print('smile'[1:3]) #输出 ...

  5. python读取日志,存入mysql

    1.从 http://www.almhuette-raith.at/apache-log/access.log 下载 1万条日志记录,保存为一个文件,读取文件并解析日志,从日志中提取ip, time_ ...

  6. 欢迎来怼--第二十一次Scrum会议

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/11/2 17:05~17:15,总计10min. 地点: ...

  7. Thunder团队第一周 - Scrum会议6

    Scrum会议6 小组名称:Thunder 项目名称:爱阅app Scrum Master:苗威 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传康 ...

  8. C#命名参数

    文章:史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~ 命名参数规范+匿名对象 routes.MapRoute(name: "Default&qu ...

  9. Java中I/O流之Print流

    Java 中的 print 流: print 流用于做输出将会非常的方便,并且具有以下特点: 1. printWriter.printStream 都属于输出流,分别针对字符,字节. 2. print ...

  10. 《剑指offer》---输出链表倒数第k个结点

    本文算法使用python3实现 1 题目描述:   输入一个链表,输出该链表中倒数第k个结点.   时间限制:1s:空间限制:32768K 2 思路描述:   方法一:当链表长度为 $ n $ 时,输 ...