JavaScript的函数没有提供显示的继承语法,因而JavaScript中的对象全部是Object的子类.因此在js中各对象之间并不存在直接的斧子关系.JavaScript提供prototype来构建内建类,通过这些内建类可以方便地创建各自的对象.
在js当中定义一个JavaScript函数时,也就得到了一个同名的类,而且该函数就是该类的构造器.因此我们认为定义一个函数的同时,实质也就是一个构造器.
在定义Person函数的同时,也定义了一个Person类,而且该Person函数就是该Person类的构造器,该构造器不仅为Person实例完成了属性的初始化,还为Person实例提供了一个info方法.但如果在一个Person类中增加一个info方法会产生许多不好的效果:
- 性能低下:因为每次创建Person实例时,程序以次向下执行,每次执行程序中粗体字代码时都将创建一个新的 info 函数.
- 使得info函数中的局部变量产生闭包:闭包会扩大局部变量的作用域,使得局部变量一直存活到函数之外的地方.
为了避免这两种情况,通常不建议直接问在函数定义(也就是类定义)中直接为该函数定义方法,而是建议使用prototype属性.
prototype的用法:
类名.prototype.方法名=function(){
}
实例
在本例中,我们将展示如何使用 prototype 属性来向对象添加属性:
<script type="text/javascript">
function employee(name,job,born)
{
this.name=name;
this.job=job;
this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
employee.prototype.salary=null;
bill.salary=20000;
document.write(bill.salary); //输出20000;
</script>