JavaScript是面向对象的语言,为了编程的方便,所以通常是用构造函数来模拟类来模拟类,构造函数就是具有一系列属性和行为作为函数体的函数,可以通过函数参数传入值。下面是构造函数的示例代码
1、普通的构造函数(注意:使用时定义的构造函数名字首字母需大写;实例化函数,然后调用)
function Run(n,num,c){//构造函数,此处的类名必须要大写
this.name=n;//this不是Run,是指实例化的对象即run_test
this.age=num;
this.color=c;
/*this.say=function(){
alert(12)
}*/
}
var run_test=new run("123",4,"blue")//Run函数的实例化方法
//可通过constructor和instanceof 来判断run_test的构造函数的原型是不是Run
//console.log(run_test.constructor==Run);//true;constructor是判断run_test的构造函数是不是Run
//console.log(run_test instanceof Run)
//prototype构造函数的原型,可以将构造函数中公用的部分放在原型里面
Run.prototype.say=function(){
alert('我是测试程序');
}
run_test.say(); 通过实例出来的构造函数去继承
2、prototype原型链
原型链:对象(类)的属性 prototype 即是对原型对象的引用,创建实例后,也有属性 __proto__ 指向原型对象,但该属性是隐含的。由于不断创造新对象(实例),一级一级的传递原型对象,即可构成原型链。通过原型链,即可实现继承。
因为在实际开发的项目中,每类对象的实例对象都有可能会有一些相同的属性,或者相同的功能,如果都写在原型构造函数上,会造成重复的内容,占用更多的内存。
为了解决这种代码的重复:
1) 构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。2)我们可以把那些不变的属性和方法,直接定义在prototype对象上。
操作步骤:
1)将原型对象实例化;
2)将此实例化的对象赋给一个变量;
3)该变量可继承原型对象prototype方法里面所有定义的属性
4)应用到相应的开发项目中
代码实例如下:(计算工资的一个小例子)
function Student(n,m){
this.name=n;
this.gongzi=m;
}
Student.prototype.study=function(num){
var money=parseInt(Math.random()*num*10);
this.gongzi +=money;
}
Student.prototype.sleep=function(num){
var money=parseInt(Math.random()*num*2);
this.gongzi +=money;
}
var zhangsan=new Student("zhangsan",3000);
var wanger=new Student("wanger",1000);
for(var i=0;i<6;i++){//月
for(var j=0;j<4;j++){//周
for(var k=0;k<5;k++){//天
zhangsan.study(5);
zhangsan.sleep(19);
wanger.study(17);
wanger.sleep(7)
}
}
}
console.log(zhangsan.gongzi);
console.log(wanger.gongzi)