JavaScript语言是动态类型的语言,基于对象并由事件驱动。用面向对象的思想来看,它也有类的概念。JavaScript 没有class关键字,就是用function来实现。
1. 实现方式及变量/方法访问域控制
1 |
function fruit(name, color) |
用this来标识变量或方法是public。
1 |
var apple = new fruit( 'apple' , 'red' ); |
跟其他大多数语言一样是用 new 关键字来实例化一个类的对象。这样 apple.name 的值就是 ‘apple'。内部变量则使用var关键字:
3 |
var subject = "welcome to nowamagic.net" ; |
这个时候访问b1.subject,得到的结果是"undefined"。
2. 类的扩展
JavaScript是动态语言,因此我们可以在类创建之后再给他添加属性(field)或方法。具体做法就是使用prototype:
01 |
function fruit(name, color) |
07 |
var apple = new fruit( 'apple' , 'red' ); |
08 |
var orange = new fruit( 'orange' , 'yellow' ); |
09 |
//apple.gender = 'undefined' |
10 |
fruit.prototype.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. 对象与数组的关系
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创建类和对象
现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = ...
- 扩展javascript扩展(类,对象,原型)
扩展javascript扩展(类,对象,原型)
- javascript:类数组 -- 对象
在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象 的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ...
- 【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链
JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承. 类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply ...
- 我所了解的关于JavaScript定义类和对象的几种方式
原文:http://www.cnblogs.com/hongru/archive/2010/11/08/1871359.html 在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hois ...
- JavaScript定义类与对象的一些方法
最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...
- Javascript基础--类与对象(五)
js面向(基于)对象编程1.澄清概念 1.1 js中基于对象 == js 面向对象 1.2 js中没有类class,但是它取了一个新的名字,交原型对象,因此 类 = 原型对象. 2.为什么需要对象? ...
- javascript定义类或对象的方式
本文介绍的几种定义类或对象的方式中,目前使用最广泛的是:混合的构造函数/原型方式.动态原型方式.不要单独使用经典的构造函数或原型方式. 工厂方式 构造器函数 原型方式 混合的构造函数/原型方式 动态原 ...
- JavaScript自定义类和对象的方法
备注:JavaScript中没有类class的概念,一般把原型对象看作类 1. 工厂方法--使用new Object创建对象并添加相关属性 var Obj = new Object; ...
随机推荐
- JAVA Map 之元素定位,冲突碰撞
基本特性: 维持健值对的集合接口,健不可以重复,每一个健只能映射到一个值. Map替代了原来的虚拟类Directory. Map提供了三种集合视角,keys(KeySet),values(Values ...
- laravel 的DB::raw() 语法使用
z之前在项目中遇到一个问题,复杂的sql查询,用laravel的查询构造器,非常的不方便,各种查询条件拼接一长串拼得脑瓜疼:然后想使用原生的sql语句来查询,然后又使用不了laravel的pagina ...
- java 流 文件 IO
Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...
- Linux服务架设篇--arp命令
ARP,地址解析协议.在以太局域网中,主机之间交换数据帧时,是通过MAC地址进行的.因此,当以太网的一台主机向另一台IP地址的主机发送数据包时,它需要知道目的IP地址所对应的MAC地址,才能把这个IP ...
- LeetCode 102 ——二叉树的层次遍历
1. 题目 2. 解答 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level_data 和一个存放每一层节点的队列 node_queue. 如果根节点非空,根节点进队,然后循 ...
- Line belt(三分镶嵌)
In a two-dimensional plane there are two line belts, there are two segments AB and CD, lxhgww's spee ...
- MyBatis 基本构成与框架搭建
核心组件 SqlSessionFactoryBuilder (构造器) 根据配置信息(eg:mybatis-config.xml)或者代码来生成SqlSessionFactory. SqlSessio ...
- Python的7种性能测试工具:timeit、profile、cProfile、line_profiler、memory_profiler、PyCharm图形化性能测试工具、objgraph
1.timeit: >>> import timeit >>> def fun(): ): a = i * i >>> timeit.timeit ...
- Combobox的使用,日期选择器
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- QT分析之调试跟踪系统
原文地址:http://blog.163.com/net_worm/blog/static/127702419201002004518944/ 在我们前面的分析中,经常看到qWarning()和qDe ...