(转载)JavaScript中面向对象那点事
鉴于自己在JavaScript这方面比较薄弱,所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南)。书的内容虽然多了点,但这也充分说明了js中的东西还是挺多的。虽然我们的定位不是前端,但最好还是了解一下js这个发展了将近20年但依然很火的技术。
两年前,写过一篇关于JavaScript闭包的博客,所以对闭包这个词印象很深,在看这书的时候,又看到了闭包,那么这次再看闭包,会有什么不同的理解呢?
大家都知道,在JavaScript中是没有类的概念的,更没有私有、公有的成员变量这样的概念。但是它又是确确实实存在着这些东西。
看下面例子:
- function MyClass(){
- this.name='李四';
- var age=2;
- }
- var test=new MyClass();
- alert(test.name); //李四
- alert(test.age) //undefined
- test.name='张三';
在用谷歌浏览器调试的过程中,age的值始终无法看到,但确实是存在的。虽然在调用test.age的时候,不会报错,但它取不出来age的值。而对于name来说,它用的是this.来修饰的,那么它就相当于是public的变量了。而用var声明的变量,就是private,至于class(Java中)这个嘛,非function莫属了。
那么对于private的变量应该怎样访问呢?
在Java中对于private的变量,我们要访问它,是为其提供了get、set方法对其进行操作,在这里也一样。看下面代码:
- this.name='李四';
- var age=2;
- this.getAge=function(){
- alert(age);
- }
- this.setAge=function(value){
- if(value>0 && value < 150)
- age=value;
- }
- }
- var test=new MyClass();
- test.getAge() //2
- test.setAge(11);
- test.getAge(); //11
在这里,这完全模拟了一个Java类中的public、private属性及私有属性的操作。
对于私有属性操作的方式,在JavaScript中有一个特有的称呼:闭包。
通过Java类的声明来理解JavaScript,突然发现曾经认为难以理解的闭包,变得不太理解为什么定义这样一个概念。
虽然目前为止还没有生成javascript属性的get、set方法,但ext已经提供了这样的工具方法来使javascript对象的属性直接具有get、set方法。
在以往的javascript使用过程中,我们更多的是采用面向过程方式,这也就暴露了我们对于js代码的复用程度很低。js的面向对象,势在必行。
(转载)JavaScript中面向对象那点事的更多相关文章
- JavaScript中面向对象那点事
鉴于自己在JavaScript这方面比較薄弱.所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南).书的内容尽管多了点,但这也充分说明了js中的东西还是挺多的.尽管我们的定位不是前 ...
- javascript中面向对象的5种写法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript中面向对象的三大特性(一个菜鸟的不正经日常)
经过几天的学习,把jQuery给啃会了,但是运用的还不算特别熟练,总感觉自己在JavaScript方面的基础十分欠缺,所以继续拾起JavaScript,开始更好的编程之旅~ 今天学的是JavaScri ...
- JavaScript中继承的那些事
引言 JS是一门面向对象的语言,但是在JS中没有引入类的概念,之前特别疑惑在JS中继承的机制到底是怎样的,一直学了JS的继承这块后才恍然大悟,遂记之. 假如现在有一个“人类”的构造函数: functi ...
- 转载 javascript中的正则表达式总结 一
定义正则表达式的方法 定义正则表达式的方法有两种:构造函数定义和正则表达式直接量定义.例如: var reg1 = new RegExp('\d{5, 11}'); // 通过构造函数定义 var r ...
- 转载: JavaScript中执行环境和栈
在这篇文章中,我会深入理解JavaScript最根本的组成之一 : "执行环境(执行上下文)".文章结束后,你应该对解释器试图做什么,为什么一些函数/变量在未声明时就可以调用并且他 ...
- [转载]JavaScript 中小数和大整数的精度丢失
标题: JavaScript 中小数和大整数的精度丢失作者: Demon链接: http://demon.tw/copy-paste/javascript-precision.html版权: 本博客的 ...
- 转载 javascript中(function($){...})(jQuery)写法是什么意思
javascript中(function($){...})(jQuery)写法是什么意思 这里实际上是匿名函数function(arg){...}这就定义了一个匿名函数,参数为arg 而调用函数 ...
- 转载 javascript中的正则表达式总结 二
学习正则表达式 今年的第一篇javascript文章就是这个正则表达式了,之前的文章是转载别人的,不算自己的东西,可以忽略不计,最近突然想把转载别人的东西 统统删掉,因为转载过的文章,我根本没有从中获 ...
随机推荐
- 读书笔记-《Training Products of Experts by Minimizing Contrastive Divergence》
Training Products of Experts by Minimizing Contrastive Divergence(以下简称 PoE)是 DBN 和深度学习理论的 肇始之篇,最近在爬梳 ...
- div+css知识点(2)
文字溢出 显示省略号的 关键的三句代码text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow:hidden;文字缩进的代码是什么text ...
- Zoj 3865 Superbot
按规则移动机器人 , 问是否能拾得宝藏 . 加了一个控制板 , 还增加了一个控制板移动周期 p 将移动周期变换一下 , 移动一次 就相当于光标向左不耗费时间的移动了一格 搜索思路 : 搜索当前格子到 ...
- 【UVALive - 3487】 Duopoly(网络流-最小割)
Description The mobile network market in country XYZ used to be dominated by two large corporations, ...
- asp.net 类库中获取session c#类中获取session
asp.net 类库中获取session c#类中获取session 1. 先引入命名空间 using System.Web; using System.Web.SessionState; 在使用H ...
- mysql左联右联内联
在MySQL中由于性能的关系,常常要将子查询(Sub-Queries)用连接(join)来却而代之,能够更好地使用表中索引提高查询效率. 下面介绍各种join的使用,先上图: 我们MySQL常用的为左 ...
- Delphi实现HTMLWebBrowser实现HTML界面
HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash.声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护.另外,HTML的显示环境一般机器上都具备,通常不需要安装额外的软件.当然, ...
- wpf 异步使用
方法前加 asyc,同步方法掉异步方法 public void Init() { buildUI(); } // await 只能用在异步方法上面 public async void buildUI( ...
- 【POJ】1056 IMMEDIATE DECODABILITY
字典树水题. #include <cstdio> #include <cstring> #include <cstdlib> typedef struct Trie ...
- Robotium 不能同时跑多个case
最近在用robotium做android自动化测试,遇到单个case可以run成功.多个case run就会卡死到第二个case. 原因是在teardown的时候没有将打开的activity全部fin ...