悟透JavaScript整理版第1/2页(6)


1     function Person(name)   //带参数的构造函数 
 2     { 
 3         this.name = name;   //将参数值赋给给this对象的属性 
 4         this.SayHello = function() {alert("Hello, I'm " + this.name);};   //给this对象定义一个SayHello方法。 
 5     }; 
 6  
 7     function Employee(name, salary)     //子构造函数 
 8     { 
 9         Person.call(this, name);        //将this传给父构造函数 
10         this.salary = salary;       //设置一个this的salary属性 
11         this.ShowMeTheMoney = function() {alert(this.name + " $" + this.salary);};  //添加ShowMeTheMoney方法。 
12     }; 
13      
14     var BillGates = new Person("Bill Gates");   //用Person构造函数创建BillGates对象 
15     var SteveJobs = new Employee("Steve Jobs", 1234);   //用Empolyee构造函数创建SteveJobs对象 
16  
17     BillGates.SayHello();   //显示:I'm Bill Gates 
18     SteveJobs.SayHello();   //显示:I'm Steve Jobs 
19     SteveJobs.ShowMeTheMoney();   //显示:Steve Jobs $1234 
20  
21     alert(BillGates.constructor == Person);  //显示:true 
22     alert(SteveJobs.constructor == Employee);  //显示:true 
23      
24     alert(BillGates.SayHello == SteveJobs.SayHello); //显示:false 


    这段代码表明,函数不但可以当作构造函数,而且还可以带参数,还可以为对象添加成员和方法。其中的第9行,Employee构造函数又将自己接收的this作为参数调用Person构造函数,这就是相当于调用基类的构造函数。第21、22行还表明这样一个意思:BillGates是由Person构造的,而SteveJobs是由Employee构造的。对象内置的constructor属性还指明了构造对象所用的具体函数!

    其实,如果你愿意把函数当作“类”的话,她就是“类”,因为她本来就有“类”的那些特征。难道不是吗?她生出的儿子各个都有相同的特征,而且构造函数也与类同名嘛!

1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgwdw.html