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方法对其进行操作,在这里也一样。
看以下代码:
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中面向对象那点事的更多相关文章
- (转载)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 ...
- (ES6)JavaScript中面向对象类的实现
在ES5中,我们就知道JS是不支持面向对象的,所以用函数模拟了一个构造函数来实现类的.那么在ES6中,在ES5的原理基础上,将代码书写更为简单,明了. 一.怎样用ES6创建类?首先看一看例子: cla ...
- JavaScript中面向对象的的深拷贝和浅拷贝
理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型. 1.值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量. 例如:var num = 123 : ...
- javascript中面向对象的两种构建方式(构造函数)和(原型模式的区别)
1.构造函数模式--->alert的结果为false <!DOCTYPE html> <html lang="en"> <head> &l ...
- 前端开发:面向对象与javascript中的面向对象实现(一)
前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...
- 深入理解javascript中实现面向对象编程方法
介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...
随机推荐
- SolrCloud架构
原文链接 https://blog.csdn.net/dingzfang/article/details/42804489 1 核心概念 Collection Shard 均为逻辑上的概念 Core为 ...
- Counting Kangaroos is Fun 求最少可见袋鼠数
Description There are n kangaroos with pockets. Each kangaroo has a size (integer number). A kangaro ...
- 数据结构实验6:C++实现二叉树类
实验6 学号: 姓名: 专业: 6.1 实验目的 掌握二叉树的动态链表存储结构及表示. 掌握二叉树的三种遍历算法(递归和非递归两类). 运用二叉树三种遍历的方法求解有关问题. 6 ...
- mysql异常Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95' for column 'region_name'
Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95' for column 'region_name' insert语句加的该字段有汉字,乱码造成的 解 ...
- HDU 5421 Victor and String
Victor and String Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on HDU. Orig ...
- Leetcode 224.基本计算器
基本计算器 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1 ...
- python多线程--线程同步
如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步. 使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire ...
- 【分段哈希】H. Paint the Wall
https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/H [题意] 在一个长为H,宽为W的白墙上选一个矩形区域涂颜色,后涂的颜色会覆盖先 ...
- 新建一个基于vue.js+Mint UI的项目
上篇文章里面讲到如何新建一个基于vue,js的项目(详细文章请戳用Vue创建一个新的项目). 该项目如果需要组件等都需要自己去写,今天就学习一下如何新建一个基于vue.js+Mint UI的项目,直接 ...
- tomcat并发数
Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的.更好的硬件,更多的处理器都会使Tomcat支持更多的并发. Tomcat默认的HTTP实现是采用阻塞式 ...