鉴于自己在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方法对其进行操作,在这里也一样。

看以下代码:

function MyClass(){
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中面向对象那点事的更多相关文章

  1. (转载)JavaScript中面向对象那点事

    鉴于自己在JavaScript这方面比较薄弱,所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南).书的内容虽然多了点,但这也充分说明了js中的东西还是挺多的.虽然我们的定位不是前 ...

  2. javascript中面向对象的5种写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. JavaScript中面向对象的三大特性(一个菜鸟的不正经日常)

    经过几天的学习,把jQuery给啃会了,但是运用的还不算特别熟练,总感觉自己在JavaScript方面的基础十分欠缺,所以继续拾起JavaScript,开始更好的编程之旅~ 今天学的是JavaScri ...

  4. JavaScript中继承的那些事

    引言 JS是一门面向对象的语言,但是在JS中没有引入类的概念,之前特别疑惑在JS中继承的机制到底是怎样的,一直学了JS的继承这块后才恍然大悟,遂记之. 假如现在有一个“人类”的构造函数: functi ...

  5. (ES6)JavaScript中面向对象类的实现

    在ES5中,我们就知道JS是不支持面向对象的,所以用函数模拟了一个构造函数来实现类的.那么在ES6中,在ES5的原理基础上,将代码书写更为简单,明了. 一.怎样用ES6创建类?首先看一看例子: cla ...

  6. JavaScript中面向对象的的深拷贝和浅拷贝

    理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型. 1.值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量. 例如:var num = 123 : ...

  7. javascript中面向对象的两种构建方式(构造函数)和(原型模式的区别)

    1.构造函数模式--->alert的结果为false <!DOCTYPE html> <html lang="en"> <head> &l ...

  8. 前端开发:面向对象与javascript中的面向对象实现(一)

    前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...

  9. 深入理解javascript中实现面向对象编程方法

    介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...

随机推荐

  1. LeetCode(73)Set Matrix Zeroes

    题目 Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. cli ...

  2. 【02】SASS与SCSS

    SASS语法 SASS语法也称之为SASS的缩进语法,其目的是担供一个更简洁的语法.对于一些人来说,更多的是基于于CSS的美学吸引力,用SASS来代替SCSS语法. SASS语法和CSS语法不一样,他 ...

  3. AI学习笔记(02)

    AI学习笔记   第一个黑箭头是用于挑选物体和移 动物体.在绘图是选中一个物体,就可以将它自由的移动.和其他的绘图软件相同当你选 中物体的时候物体周围就会出现八个方形的控制点,你可以通过这些控制点对物 ...

  4. 大数据学习——装私服nexus

    (一)安装 解压之后 进入bin文件夹下 复制路径 D:\software\nexus-2.12.0-01-bundle\nexus-2.12.0-01\bin 进入命令行窗口输入以下命令,安装成功 ...

  5. PTA 05-树9 Huffman Codes (30分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/671 5-9 Huffman Codes   (30分) In 1953, David ...

  6. devstack脚本安装Openstack总结(转载)

    1:vmware 基本设置 我采用的vmware workstation 8.0的版本,其他版本应该都是没问题.我是把虚拟机放在NAT的网络. 虚拟机就单块网卡就可以. 如果你希望可以在dashboa ...

  7. 【贪心+前缀】C. Fountains

    http://codeforces.com/contest/799/problem/C [题意] 有n做花园,有人有c个硬币,d个钻石 (2 ≤ n ≤ 100 000, 0 ≤ c, d ≤ 100 ...

  8. <转>C#中线程的学习

    原文发布时间为:2008-11-15 -- 来源于本人的百度文章 [由搬家工具导入] http://hi.baidu.com/cyap/blog/category/%B6%E0%CF%DF%B3%CC ...

  9. iOS textView在调用textViewDidChange方法,中文输入的问题

    有时候,需要在textViewDidChange处理时,在中文输入的情况下,例如输入“中”,对应的拼音“zhong”, 在textViewDidChange的方法里会把拼音也算进去:导致输入中文时也输 ...

  10. Django学习之 - 基础部分

    学习记录参考: 讲师博客:http://www.cnblogs.com/wupeiqi/articles/5433893.html 老男孩博客:http://oldboy.blog.51cto.com ...