JavaScript 面向对象编程入门案例
来源:互联网 发布:java web项目相对路径 编辑:程序博客网 时间:2024/05/17 03:15
JavaScript可以说是基于对象的语言,因为它不像其他面向对象的语言那样,有诸如private,public等等的关键字来定义一个类。
但是,JavaScript可以通过它特殊的语法来模拟面向对象语言的写法。
1.public
如果定义一个类,并且在类里添加属性。
在java中,我们常常这么写
public class Person { public String name; public String sex; public Person(String name,String sex){ this.name = name; this.sex = sex; }}
上面的代码中,定义了一个Person类,里面有两个属性name和sex,它们都是公共变量。
现在利用构造器,我们新建一个对象:
Person p1 = new Person("张三","男");
我们可以通过这个对象,拿到name和sex的值。
System.out.println(p1.name);System.out.println(p1.sex);
运行结果:
张三
男
在JS中,没有专门的关键字来定义一个类,但是可以通过function的方式来定义一个构造器。
比如,我们可以这样来定义一个Person类的构造器:
function Person(name,sex){ this.name = name; this.sex = sex;}
在JS中,this的变量就相当于JAVA中的public成员变量,直接写在构造器里,不需要在构造器外边单独定义,这是第一个不同点。
我们通过下面的语句可以创建对象和弹出属性值:
var p1 = new Person("张三","男");alert(p1.name+" "+p1.sex);
运行结果:
到目前为止,JS实现了类的定义和公共成员变量的访问。
2.private
那么,对于一个人而言,名字和性别公开的确没关系,可是对于一些比较敏感的信息,比如婚否,薪资等,是不能随便公开的,所以,JAVA中会把这些信息设置为私有属性。
像这样:
public class Person {private String name;private String sex;public Person(String name,String sex){this.name = name;this.sex = sex;}}
只是这样的话,就需要响应的get和set方法来操作这些私有属性了,即便是JAVA,外部也无法直接访问这些属性。
像这样:
public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
在外部通过公共方法来访问即可:
Person p1 = new Person("张三","男");System.out.println(p1.getName());System.out.println(p1.getSex());
运行结果:
张三
男
在JS中,没有private关键字,只能通过特殊的语法来模拟私有成员变量,如下:
function Person(p_name,p_sex){var name = name;var sex = sex;this.getName = function(){return name;}this.getSex = function(){return sex;}}var p1 = new Person("张三","男");alert(p1.getName()+" "+p1.getSex());
没错,在JS中用var来模拟私有成员变量,这是通过作用域的概念来模拟的,在function里面的var变量,是局部变量。
遗憾的是,结果是弹出两个undefined:
function Person(){var name;var sex;this.setName = function(p_name){name = p_name;}this.setSex = function(p_sex){sex = p_sex;}this.getName = function(){return name;}this.getSex = function(){return sex;}}var p1 = new Person();p1.setName('张三');p1.setSex('男');alert(p1.getName()+" "+p1.getSex());
运行结果:
3.static
public class Person {public static int icount = 0;public Person(String name,String sex){icount ++; //每创建一个Person对象,计数器 + 1}}
public static void main(String[] args) {Person p1 = new Person();Person p2 = new Person();Person p3 = new Person();Person p4 = new Person();Person p5 = new Person();Person p6 = new Person();Person p7 = new Person();System.out.println(Person.icount);}
运行结果:
7
在JS中,就像这样给某个类添加静态属性:
//定义一个空构造器function Person(){Person.icount ++;}Person.icount = 0;new Person();new Person();new Person();new Person();new Person();new Person();new Person();alert(Person.icount);
运行结果:
- JavaScript 面向对象编程入门案例
- JavaScript 面向对象入门
- perl面向对象编程案例
- 面向对象编程入门
- JavaScript 面向对象编程
- JavaScript 面向对象编程
- javascript面向对象编程
- javascript 面向对象编程
- JavaScript面向对象编程
- JavaScript 面向对象编程
- JAVASCRIPT - - 面向对象编程
- JavaScript面向对象编程
- JavaScript面向对象编程
- JavaScript面向对象编程
- javascript面向对象编程
- JavaScript面向对象编程
- javascript面向对象编程
- JavaScript面向对象编程
- [LeetCode]9. Palindrome Number
- nginx中的connnection
- CoordinatorLayout与滚动的处理
- 新学习:在eclipse中新建maven项目出现的一些问题
- openmesh 基底和减枝
- JavaScript 面向对象编程入门案例
- [BZOJ1208][HNOI2004]宠物收养所(平衡树splay)
- ios的位置和方向(来自苹果官方文档,仅供简单参考)
- Android RecyclerView的使用
- 有用的工具
- poj 1015 Jury Compromise 动态规划
- 时效性(走向专业码农之路)
- Android 大杂烩工程之底部导航栏的实现方式
- 检测数据库日志的切换频率及归档文件大小的sql