javascript中的构造函数和继承
1.第一节
function CreatePerson(name,sex){//构造函数:用于构造对象 可以说在js里类就是构造函数//1.原料var obj=new Object();//2.加工obj.name=name;obj.sex=sex;obj.showName=function(){console.log(this.name);}obj.showSex=function(){console.log(this.sex);}//3.出厂return obj;} var p1=CreatePerson('ryan','boy');//问题1:不是用new构造对象,第二节解决用new构造对象var p2=CreatePerson('lili','girl'); p1.showName();p1.showSex();p2.showName();p2.showSex(); console.log(p1.showName==p2.showName);//问题2:每个对象都有一套自己的函数 false2.第二节
function CreatePerson(name,sex){//假想的系统内部工作流程//var this = new Object();省略此语句this.name=name;//使用this指定构造函数的name属性this.sex=sex;this.showName=function(){//使用this指定构造函数的showName属性console.log(this.name);}this.showSex=function(){console.log(this.sex);}//假想的系统内部工作流程//return this;省略此语句} var p1=new CreatePerson('ryan','boy');//使用new构造对象或者叫构造实例var p2=new CreatePerson('lili','girl'); p1.showName();p1.showSex();p2.showName();p2.showSex(); console.log(p1.showName==p2.showName);//每个对象都有一套自己的函数 false3.第三节
//假想的系统内部工作流程//var this = new Object();this.name=name;this.sex=sex;//假想的系统内部工作流程//return this;}//将showName方法定义到构造方法CreatePerson的prototype上, //这样的好处是,通过构造函数生成的实例所拥有的方法都是指向一个函数的索引,这样可以节省内存
CreatePerson.prototype.showName=function(){//构造函数CreatePerson的prototype原型属性指定另一个对象,即prototype对象console.log(this.name);}CreatePerson.prototype.showSex=function(){console.log(this.sex);}//通过构造函数生成的实例p1和p2所拥有的方法showName和showSex都是指向一个函数的索引,这样可以节省内存
var p1=new CreatePerson('ryan','boy');var p2=new CreatePerson('lili','girl'); p1.showName();p1.showSex();p2.showName();p2.showSex(); console.log(p1.showName==p2.showName);//每个对象共用一套函数(原型的函数)4.第四节
function Person(name,sex){ //构造函数:用于构造对象this.name=name;this.sex=sex;this.showName=showName;//不使用原型定义方法:this.showSex=showSex;}function showName(){console.log(this.name);}function showSex(){console.log(this.sex);}//继承function Worker(name,sex,job){Person.call(this,name,sex);this.job=job;}for(var i in Person.prototype){Worker.prototype[i]=Person.prototype[i];}Worker.prototype.showJob=function(){console.log(this.job);} var p1=new Person('ryan','boy');var p2=new Person('lili','girl');var ow1=new Worker('cccc','girl','工程师'); p1.showName();p1.showSex();p2.showName();p2.showSex();ow1.showJob(); //p1和p2两个对象共用一个showName函数,这样就可以节省内存console.log(p1.showName==p2.showName);console.log(p1.showName==ow1.showName);5.第五节--继承
//假想的系统内部工作流程//var this = new Object();this.name=name;this.sex=sex;//假想的系统内部工作流程//return this;}Person.prototype.showName=function(){console.log(this.name);}Person.prototype.showSex=function(){console.log(this.sex);} //继承function Worker(name,sex,job){//以下的this是new出来的Worker对象//调用父级的构造函数,为了继承属性Person.call(this,name,sex);this.job=job;};//原型链 通过原型来继承父级的方法Worker.prototype=Person.prototype;//问题:两个构造函数其实是同一个Worker.prototype.showJob=function(){console.log(this.job);}; var ow1=new Worker('ryan','boy','打杂的');ow1.showName();ow1.showSex();ow1.showJob();console.log(Person.prototype);console.log(Person.prototype.showJob);//Person多了showJob方法6.第六节--继承
//构造函数:用于构造对象 可以说在js里类就是构造函数function Person(name,sex){//假想的系统内部工作流程//var this = new Object();this.name=name;this.sex=sex;//假想的系统内部工作流程//return this;}Person.prototype.showName=function(){console.log(this.name);}Person.prototype.showSex=function(){console.log(this.sex);} //继承function Worker(name,sex,job){//以下的this是new出来的Worker对象//构造函数伪装 调用父级的构造函数,为了继承属性Person.call(this,name,sex); //使用Person对象代替this对象(Worker对象),这样Worker中就有Person的属性和方法了。 //name,sex两个参数是Person对象的参数this.job=job;//定义Worker对象自己的属性};//原型链 通过原型来继承父级的方法// Worker.prototype=Person.prototype; 不能用这种引用的方式for(var i in Person.prototype){//解决第四节中的问题,两个构造函数不相同了。Worker.prototype[i]=Person.prototype[i];}Worker.prototype.showJob=function(){console.log(this.job);}; var op1=new Person('john','girl');var ow1=new Worker('ryan','boy','打杂的'); op1.showName();op1.showSex();//op1.showJob();//已经没有这个方法了。console.log(Person.prototype); console.log('\n ow1:');ow1.showName();ow1.showSex();ow1.showJob();console.log(Worker.prototype);javascript中的构造函数和继承的更多相关文章
- 【转】JavaScript中的原型和继承
请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans ...
- javascript中创建对象和实现继承
# oo ##创建对象 1. 原型.构造函数.实例之间的关系 * 原型的construct->构造函数:调用isPrototypeOf(obj)方法可以判定和实例的关系: * 构造函数的pro ...
- 谈谈javascript中的prototype与继承
谈谈javascript中的prototype与继承 今天想谈谈javascript中的prototype. 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性 ...
- JavaScript中的构造函数和工厂函数说明
在cnblog上看到一篇文章,讲解JS中的构造函数和工厂函数,觉得讲的真好 JavaScript中的工厂函数和构造函数都能用来创建一个对象,我们可以来看看下面的例子 构造函数 function cre ...
- JavaScript中的构造函数和原型!
JavaScript中的原型! 原型的内容是涉及到JavaScript中的构造函数的 每一个构造函数都有一个原型对象!prototype 他的作用是 共享方法!还可以扩展内置对象[对原来的内置对象进行 ...
- javascript中的原型和继承
javascript一直是初学者口中的难点,甚至一些有些许工作经验的人也不太明白其中的原理,而我就是那个初学者,前段时间在阮一峰老师的博客上看了一篇文章<javascript继承机制的设计思想& ...
- javascript中的对象之间继承关系
相信每个学习过其他语言的同学再去学习JavaScript时就会感觉到诸多的不适应,这真是一个颠覆我们以前的编程思想的一门语言,先不要说它的各种数据类型以及表达式的不同了,最让我们头疼,恐怕就是面向对象 ...
- JavaScript中的构造函数
目录: constructor & prototype 为构造函数添加属性和方法的多种不同方法 组合使用this和prototype关键字创建构造函数(常用方法) 用对象直接量作为构造函数的参 ...
- Javascript中的prototype与继承
通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性列表.javascript创建对象时采用了写时复制的理念. 只有构造器才具有prototype属性,原型链继承 ...
随机推荐
- 【跑会指南】2017年3-5月IT技术会议大合集
2016年各类大会让人应接不暇,技术圈儿最不缺的就是各种大会小会,有的纯干货,有的纯广告.作为一名技术开发者,参加了几场大会,你是不是也开始思忖:究竟哪些会议才值得参加?下面活动家为你推荐几场2017 ...
- Python实现脚本锁功能,同时只能执行一个脚本
1. 文件锁 脚本启动前检查特定文件是否存在,不存在就启动并新建文件,脚本结束后删掉特定文件. 通过文件的判断来确定脚本是否正在执行. 方法实现也比较简单,这里以python脚本为例 #coding= ...
- grep与正则表达式
grep的作用:文本搜索工具,根据用户指定的"模式"对目标文件逐行进行匹配检查:打印匹配到的行. 模式:正则表达式编写的过滤条件. 正则表达式(REGEXP):由一类特殊字符及文本 ...
- 用react系列技术栈实现的demo整合系统
引子 学生时代为了掌握某个知识点会不断地做习题,做总结,步入岗位之后何尝不是一样呢?做业务就如同做习题,如果‘课后’适当地进行总结,必然更快地提升自己的水平. 由于公司采用的react+node的技术 ...
- jQuery选择器---层次选择器总结
今天要分享的是jQuery层次选择器,层次选择器的分类如图: 接下来就开始了 要不先养养眼精神一下: 开始1.祖先选择器: 案例: <form> <label>Name:< ...
- Java学习笔记——序列化和反序列化
寒雨连江夜入吴,平明送客楚山孤. 洛阳亲友如相问,一片冰心在玉壶. --芙蓉楼送辛渐 持久化数据的第一种方式.在序列化之前也可以把数据打散逐行存储在文件中,然后在逐行读取. 比如定Student类 用 ...
- 实现ThreadFactory接口生成自定义的线程给Fork/Join框架
Fork/Join框架是Java7中最有趣的特征之一.它是Executor和ExecutorService接口的一个实现,允许你执行Callable和Runnable任务而不用管理这些执行线程.这个执 ...
- ASP.NET Core 菜鸟之路:从Startup.cs说起
1.前言 本文主要是以Visual Studio 2017 默认的 WebApi 模板作为基架,基于Asp .Net Core 1.0,本文面向的是初学者,如果你有 ASP.NET Core 相关实践 ...
- How-to go parallel in R – basics + tips(转)
Today is a good day to start parallelizing your code. I’ve been using the parallel package since its ...
- mysql5.6 主从复制
Master 192.168.59.128 Slave 192.168.59.129 默认认为已安装mysql5.6 mysql5.6 rpm安装配置 修改Master my.cnf文件 # ...