<script type="text/javascript">
//1. 采用new 方法,构造模式,运用this和prototype
function Cat1(name,color){
this.name = name;
this.color = color;
}
catA = new Cat1('大黄','黄色');
alert(catA.name); //大黄;
Cat1.prototype.makeSound = function() {
alert("喵喵喵" );
};
catA.makeSound(); //喵喵喵
//2 .采用Object.create()方法
var Cat2 = {
name:'大黑',
color:'黑色',
makeSound : function(){
alert('sb');
}
}
var catB = Object.create(Cat2);
alert(catB.name); //大黑
catB.makeSound(); // sb
//3 .采用 "极简主义法"(minimalist approach)
//3.1. 封装。首先,它也是用一个对象模拟"类"。在这个类里面,定义一个构造函数createNew(),用来生成实例。
var Dog = {
createNew:function(){
var dog = {};
dog.color = '黄';
dog.name = '狗';
dog.makeSound = function(){
alert('汪汪汪');
}
return dog;
}
}
var dog1 = Dog.createNew();
alert(dog1.name); //狗
dog1.makeSound(); //汪汪汪
//3.2. 继承 。让一个类继承另一个类,实现起来很方便。只要在前者的createNew()方法中,调用后者的createNew()方法即可
var Animal = {
createNew:function(){
var animal = {};
animal.sleep = function(){alert('睡觉')};
return animal;
}
}
var Pig = {
createNew:function(){
var pig = Animal.createNew();
pig.name = '猪';
return pig;
}
}
var pig1 = Pig.createNew();
alert(pig1.name); //子属性 :猪
pig1.sleep();// 父方法 睡觉
// 3.3. 私有属性和私有方法
// 在createNew()方法中,只要不是定义在peopel对象上的方法和属性,都是私有的。
var People = {
createNew:function(){
var people = {};
people.name = '人';
people.say = function(){alert('会说话')};
var fly = "我会飞"; //私有属性
var swim = function(){alert('我会游泳')}; //私有方法
people.flying = function(){alert(fly)};
people.swiming = function(){swim();};
return people;
}
}
var people1 = People.createNew();
alert(people1.fly); //undefined
people1.flying(); //我会飞
people1.swiming(); //我会游泳
// 3.4 数据共享
// 有时候,我们需要所有实例对象,能够读写同一项内部数据。这个时候,只要把这个内部数据,封装在类对象的里面、createNew()方法的外面即可。
var Car = {
size:'15马力',
createNew:function(){
car = {};
car.getSize = function(){
alert(Car.size);
};
car.setSize = function(size){
Car.size = size;
}
return car;
}
}
var car1 = Car.createNew();
var car2 = Car.createNew();
car1.getSize();
car1.setSize('300马力');
car1.getSize(); //变了
car2.getSize(); //也变了。
</script>