基础知识
JavaScript中的类
JavaScript实际上是一种弱类型语言,与C++和Java等语言不同。因此,在JavaScript中,没有强调类(class)这一概念,但实际运用中,类还是很重要的,比如写一款游戏,如果我们不停地调用函数来完成创建角色,移动角色的话,那会是什么样的呢?可能会出现非常多的重复代码,因此我们需要一个类来统一这些代码。所谓的类,就是把程序中的代码分类,比如说游戏中的关于角色的代码算作一类,游戏背景算作一类,游戏特效又是一类。这样一来,我们对类进行操作,就不会使代码显得很凌乱,冗杂。虽然Js是弱类型语言,但是也提供了类这一概率。
定义Js中的类,实际上用的是function
,总所周知,这个语法其实是用来定义函数的。不同于定义函数的是,我们可以在function
中通过this.xxx
的方式来定义属性和方法。比如说:
function People () {
this.name = "Yorhom";
this.getName = function () {
return this.name
};
}
使用的时候使用new
:
var yorhom = new People();
// "Yorhom"
alert(yorhom.getName());
可以看到,这样就可以使用到我们定义的类和类中的方法了。
也许你会问this.xxx
只能定义公有属性和方法,那私有属性和方法怎么办呢?这个可以用到js闭包的知识来解决:
function People () {
this.name = "Yorhom";
var age = 16;
this.getName = function () {
return this.name
};
this.getAge = function () {
return age;
};
}
var yorhom = new People();
// undefined
alert(yorhom.age);
// 16
alert(yorhom.getAge());
可以看到,这里的age就是一个私有属性了。
JavaScript中的prototype
上面的代码美中不足的地方就是,如果一个类有很多方法,同时用到这个类的地方又有很多(也就是new
出来的对象有很多),那么用上面的代码就会出现内存占用过剩的问题。问题的根本原因在于,每次实例化一个对象,这个类就会执行构造器里的代码(以People类为例就是function People ()