【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>

 

posted @ 2013-05-30 06:05  Zhentiw  阅读(180)  评论(0编辑  收藏  举报