返回介绍

第九课时

发布于 2024-09-07 17:38:19 字数 5141 浏览 0 评论 0 收藏 0

回顾:

1、prototype 内存解析

  • prototype 是原型,是一块所有对应构造器创建的对象都共享的内存空间
  • 在面向对象设计程序的时候,属性应该是对应的空间的,而功能应该是 prototype 公共空间的

2、通过 prototype 扩展功能

  • 所有的构造器都是继承于 Object 构造器的,因此只要 Object 的原型里有的功能,所有的对象都有
  • 构造器在定义的时候 就默认创建了一个空的原型

3、封装

  • 1:找对象 小头爸爸 大头儿子 饭
  • 2:抽象(类,构造器)
  • 3:创建对象并且建立关系(操作对象)
  • 面向对象例子
//小头爸爸牵着大头儿子的手去吃饭,吃完饭之后,

//小头爸爸背着大头儿子回家,回家后儿子学习,老爸工作,工作学习完后

//儿子看动画片

//围裙妈妈带儿子睡觉

//张三和张四

//分析对象 小头爸爸 大头儿子 饭 以及功能

//设计构造器(类)

//创建对象以及他们之间的关联

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);

知识点:

  • 1.继承
  • 2.面向对象程序设计案例(猜拳)

一些内存图示

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文