【Javascript】类,封装性 -- 1
组合使用构造函数模式和原型模式(优化方案)
方式: 构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性。
代码:要求编写一段程序,实现统计人数,给每个人分配姓名,年龄,工作等属性,并且可以给每个人分配好友,并且可以查看好友的信息。
Javascript代码:
//构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性 function God(){ //构造函数模式 this.children = new Array(); this.totalNumber = 0; } //原型模式 God.prototype = { //在原型模式中,可以有函数,也可以有属性 constructor: God, name: "GOOGLE", //显示所有的孩子 showChildren : function(){ for(var i = 0; i < this.children.length; i++){ document.write(i+"th child is "+this.children[i].name+'<br/>'); } }, //添加一个孩子 addOneChild : function(name, age, job){ this.totalNumber++; var child = new Person(name, age, job); this.children.push(child); return child; }, //统计孩子的个数 tellNumber : function(){ document.write("Currently, there are "+this.totalNumber+" children"+'<br/>'); } } function Person(name, age, job){ //构造函数模式 this.name = name || ''; this.age = age || ''; this.job = job || ''; this.friends = []; } //原型模式 Person.prototype = { constructor: Person, //姓名 sayName : function(){ document.write("sayName: "+this.name+'<br/>'); }, sayHello : function(){ document.write("Hello, This is "+this.name+'<br/>'); }, //添加一个朋友 addFriend : function(obj){ if(obj===this){ return; }else{ this.friends.push(obj); } }, //显示所有的朋友 showFriends : function(){ if(this.friends.length == 0){ document.write(this.name+" has no friend<br/>"); return;} for(var i = 0; i < this.friends.length; i++){ document.write(this.name+" is friend with "+this.friends[i].name+'<br/>'); } } } function doFirst(){ var god = new God(); var yuri = god.addOneChild('yuri', 22, 'Singer'); var yoona = god.addOneChild('yoona', 21, 'singer'); var zhentian = god.addOneChild('Zhentian', 24, 'Programmer'); god.showChildren(); yuri.addFriend(yuri); yuri.addFriend(yoona); yuri.sayName(); yuri.showFriends(); zhentian.showFriends(); god.tellNumber(); }
html代码:
<!DOCTYPE html> <head> <meta charset='utf-8'> <script src="object.js"></script> </head> <body onload="doFirst()"> </body>