//小头爸爸牵着大头儿子的手去吃饭,吃完饭之后,
//小头爸爸背着大头儿子回家,回家后儿子学习,老爸工作,工作学习完后
//儿子看动画片
//围裙妈妈带儿子睡觉
//张三和张四
//分析对象 小头爸爸 大头儿子 饭 以及功能
//设计构造器(类)
//创建对象以及他们之间的关联
function Person(name,age){
this.name = name;
this.age = age;
}
function Rice(name){
this.name = name;
}
//Person.prototype.getHand = function(){//这样子写也可以 但还是用默认生成的那块空的内存对象 往里面添加属性 方法
//不浪费内存
//}
//在 prototype 中定义的每个对象都有这些功能
Person.prototype = {//这样子写 抛弃了默认生成的那块空的内存对象 重新创建了一块新的内存对象 记住:原型的本质是对象
//多个功能写在一起
getHand:function(person){//牵手
alert(this.name+"在牵着"+person.name+"的手....");
},
eat:function(rice){
alert(this.name+"在吃"+rice.name);
},
//需求 18 岁以上才能背人
/* //写法一 不推荐 这个满足 18 岁的功能是自己强加的 不是客户需求的
carry:function(person){//这里设计不合理 让老爸有这个功能 儿子没有这个功能
if(this.age>=18){
alert(this.name+'背着'+person.name);
}else{
alert(this.name+",还未满 18 岁,背不起");
}
},*/
backhome:function(){
alert(this.name+"回家");
},
study:function(){
alert(this.name+"正在学习");
},
watchTV:function(jm){
alert(this.name+"正在看"+jm+'...');
}
};
var p1 = new Person("老爸",20);
var p2 = new Person("儿子",15);
//p1.getHand(p2);
//p1.eat(new Rice("蛋炒饭"));
//p2.eat(new Rice("猪脚饭"));
//p1.carry(p2);//老爸背儿子
//p2.carry(p1);//让儿子背老爸 输出结果:儿子,还未满 18 岁,背不起
//p1.backhome();
//写法二 不推荐 100 对关系 代码写很多遍
/*
//让老爸单独有背的这个功能 儿子没有这个功能
p1.carry = function(person){
alert(this.name+'背着'+person.name);
}
p1.carry(p2);
*/
//-------通过继承解决这个 让老爸单独有背的这个功能 儿子没有这个功能 可以应对多功能 多需求
//功能函数
Object.prototype.extends = function(func,actions){//让所有的子孙 构造器都有这个功能
for(var prop in func.prototype){//传进一个 func 构造器 迭代构造器中的功能 把构造器中的功能全都映射过来 复制一份
this.prototype[prop] = func.prototype[prop];//迭代原型中的所有的功能到 当前里面去
}
for(var prop in actions){
this.prototype[prop] = actions[prop];
}
};
function Father(name){
this.name = name;
}
Father.extends(Person,{
carry:function(person){
alert(this.name+'背着'+person.name);
},
work:function(){
alert(this.name+"正在工作");
}
});
//扩展
//设计程序有个原则:不修改只增加
function Children(name){
this.name = name;
}
Children.extends(Person);
function Mother(name){
this.name = name;
}
Mother.extends(Person,{
scoop:function(person){
//判断必须是 children 的对象才能执行这个功能
//if(){
alert(this.name+"唱着摇篮曲哄"+person.name+"睡觉");
//}
}
});
/*
Father.prototype.carry= function(person){//创建这个原型的想法是:原来 Person 有的功能 我都需要有 并在这些基础上加一个功能 carry
//如何建立 Father 基础 Person 的功能?写一个继承的小工具来操作
alert(this.name+'背着'+person.name);
};
Father.prototype.work = function(){
alert(this.name+"正在工作");
}
*/
var p1 = new Father("老爸");
var p2 = new Children("儿子");
p1.carry(p2);//只有老爸有 carry 这个功能
//p2.carry(p1);//error 儿子没有 carry 这个功能
p2.study();//儿子在学习
p1.work();//老爸在工作
p1.watchTV('看足球');
p2.watchTV('蜡笔小新');
var p3 = new Mother('围裙妈妈');
p3.scoop(p2); |
发布评论