/**
* 工厂方法:
* 存在问题:重复创建对象eat
*/
function CreatePeople(name){
var people=new Object();
people.name=name;
people.eat=function(){
alert(this.name+' is eating !!')
};
return people;
}
/**
* 构造函数法:
* 存在问题:重复创建对象eat
* 使用new 来创建对象,如:var p=new People('saber')
* 在执行第一句代码前,先创建一个对象(并返回,所以构造函数最后无须return),只有用this才能访问该对象,
*
*/
function People(name){
this.name=name;
this.eat=function(){
alert(this.name+' is eating !!')
};
}
/**
* 混合的构造函数/原型方式(推荐)
*/
var People1=function (name){
this.name=name;
}
People1.prototype={
eat:function(){
alert(this.name+' is eating !')
}
}
/* 自定义构造函数为:initialize
* 在使用new创建对象的时候,执行initialize函数,
*/
var People11=function (){
this.initialize.apply(this, arguments);
}
People11.prototype={
initialize:function(name){
this.name=name;
alert(' Initializing Ok !!');
},
eat:function(){
alert(this.name+' is eating !')
}
}
/* 有以上基础,如果我们要以一种统一的方式来定义类,该如何呢?
* 像java中定义类都采用Class关键字一样,而在JS中,没有类这个概念,
* 那么我们首先声明一个对象MyClass
*/
var MyClass=function(){
return function(){//闭包
this.initialize.apply(this, arguments);
}
}
/*
* 定义类:
*/
var ClassOne=MyClass();
ClassOne.prototype={
initialize:function(name){
this.name=name;
alert(this.name+' initializing Ok !')
},
methodOne:function(){
alert("My name is:" + this.name);
}
}
var ClassTwo=MyClass();
ClassTwo.prototype={
initialize:function(name){
this.name=name;
},
methodTwo:function(){
alert("My name is:" + this.name);
}
}
/**
* 采用prototype.js,它的方法和我们上边的一样:
* var Class = {
* create: function() {
* return function() {
* this.initialize.apply(this, arguments);
* }
* }
*}
*/
var People2=Class.create();
People2.prototype={
//自定义的构造函数:initialize
initialize:function(name,sex){
this.name=name;
this.sex=sex;
},
eat:function(){
alert(this.name+' is eating ');
},
showSex:function (){
alert(this.name+'\'s sex is :'+this.sex);
}
}