鉴于自己在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. Ubuntu16.04进入无限登录状态的解决办法

    具体来说就是,输入密码之后又到了登录界面,无限循环(也许可能不能输入密码,这种状态我没有测试) 此方案仅适用于安装过NVIDIA显卡驱动的系统并且在登录界面会发现分辨率变了 如果你没有安装过NVIDI ...

  2. 【POJ 1061】青蛙的约会(EXGCD)

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

  3. HDU 1257 最少拦截系统(最长上升子序列)

    题意: 给定n个数, 然后要求看看有多少对不上升子序列. 分析: 求出最长上升子序列, 那么整个序列中LIS外的数都会在前面找到一个比自己大的数, 所以不上升子序列最多有最长上升子序列个数个. 关于求 ...

  4. POJ 3468 A Simple Problem with Integers (线段树多点更新模板)

    题意: 给定一个区间, 每个区间有一个初值, 然后给出Q个操作, C a b c是给[a,b]中每个数加上c, Q a b 是查询[a,b]的和 代码: #include <cstdio> ...

  5. [jzoj5073 GDOI2017第二轮模拟] 影魔

    Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵 ...

  6. 【BZOJ3295】动态逆序对(BIT套动态加点线段树)

    题意:对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. 给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对 ...

  7. poj1330+hdu2586 LCA离线算法

    整整花了一天学习了LCA,tarjan的离线算法,就切了2个题. 第一题,给一棵树,一次查询,求LCA.2DFS+并查集,利用深度优先的特点,回溯的时候U和U的子孙的LCA是U,U和U的兄弟结点的子孙 ...

  8. Educational Codeforces Round 37 (Rated for Div. 2) G

    G. List Of Integers time limit per test 5 seconds memory limit per test 256 megabytes input standard ...

  9. strcpy c标准库函数

    C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间. 已知strcpy函数的原型是: char *strcpy(char *dst, const ...

  10. ArrayList内部实现原理

    数组在创建的时候长度是固定的,那么就有往ArrayList中不断添加对象的时候,那么ArrayList是如何管理这些数组的? ArrayList内部通过Object[]实现,我们通过分析ArrayLi ...