1.第一节

使用工厂模式创建一个构造函数CreatePerson
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:每个对象都有一套自己的函数 false

2.第二节

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);//每个对象都有一套自己的函数 false

3.第三节

function CreatePerson(name,sex){ 
//假想的系统内部工作流程
//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.第五节--继承

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);
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中的构造函数和继承的更多相关文章

  1. 【转】JavaScript中的原型和继承

    请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans ...

  2. javascript中创建对象和实现继承

    # oo ##创建对象 1. 原型.构造函数.实例之间的关系 * 原型的construct->构造函数:调用isPrototypeOf(obj)方法可以判定和实例的关系:  * 构造函数的pro ...

  3. 谈谈javascript中的prototype与继承

    谈谈javascript中的prototype与继承 今天想谈谈javascript中的prototype. 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性 ...

  4. JavaScript中的构造函数和工厂函数说明

    在cnblog上看到一篇文章,讲解JS中的构造函数和工厂函数,觉得讲的真好 JavaScript中的工厂函数和构造函数都能用来创建一个对象,我们可以来看看下面的例子 构造函数 function cre ...

  5. JavaScript中的构造函数和原型!

    JavaScript中的原型! 原型的内容是涉及到JavaScript中的构造函数的 每一个构造函数都有一个原型对象!prototype 他的作用是 共享方法!还可以扩展内置对象[对原来的内置对象进行 ...

  6. javascript中的原型和继承

    javascript一直是初学者口中的难点,甚至一些有些许工作经验的人也不太明白其中的原理,而我就是那个初学者,前段时间在阮一峰老师的博客上看了一篇文章<javascript继承机制的设计思想& ...

  7. javascript中的对象之间继承关系

    相信每个学习过其他语言的同学再去学习JavaScript时就会感觉到诸多的不适应,这真是一个颠覆我们以前的编程思想的一门语言,先不要说它的各种数据类型以及表达式的不同了,最让我们头疼,恐怕就是面向对象 ...

  8. JavaScript中的构造函数

    目录: constructor & prototype 为构造函数添加属性和方法的多种不同方法 组合使用this和prototype关键字创建构造函数(常用方法) 用对象直接量作为构造函数的参 ...

  9. Javascript中的prototype与继承

    通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性列表.javascript创建对象时采用了写时复制的理念. 只有构造器才具有prototype属性,原型链继承 ...

随机推荐

  1. 多源最短路Floyd 算法————matlab实现

    弗洛伊德(Floyd)算法是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名. 基本思想 通过Floyd计 ...

  2. android webview和 javascript 进行交互

    HTML5进行app开发具有开发快,跨平台等优点,但是当客户需要访问照相机或者调用摄像头等硬件的时候,H5就会有限制,必须要调用原生方法进行设备访问.下面简要介绍JS和原生方法互相调用的方法: 1 在 ...

  3. 在Centos7 更改Docker默认镜像和容器的位置

    图片出处:https://bobcares.com/wp-content/uploads/docker-change-directory.jpg 一.Why? 通常,当你开始使用docker时,我们并 ...

  4. springMVC---简介

    SpringMVC介绍 为什么要使用springMVC? 很多应用程序的问题在于处理业务数据和显示业务数据的视图的对象之间存在紧密耦合.通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对 ...

  5. 文本主题模型之LDA(一) LDA基础

    文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法(TODO) 在前面我们讲到了基于矩阵分解的 ...

  6. 关于MySQL数据库的一些操作

    启动:net start MySQL 关闭:net stop MySQL (也可以用quit:) 登录到MySQL:mysql -u root -p -u : 所要登录的用户名; -p : 告诉服务器 ...

  7. 开发一个Servlet示例

    Servlet响应请求步骤: Servlet是一个基于Java技术的Web组件,运行在服务器端,用户利用Servlet可以很轻松地扩展Web服务器的功能,使其满足特定的应用需要.Tomcat是一个常用 ...

  8. jmeter将参数值写入到指定文件

    有时在测试过程中需要将测试过程中生成的参数保存下来,jmeter并没有此类功能,此时,可以 通过beanshell编写代码来实现 思路: 每次请求响应返回后,通过正则表达式获取到需要保存的值,通过Be ...

  9. 什么样的PPT能助你成为一个优秀的演讲者——程序员的演讲之道

    欢迎访问我的个人博客,原文链接:http://wensibo.top/2017/05/28/speaker/ ,未经允许不得转载! 前言 今天是端午节假期的第一天,在这里祝大家假期快乐,不过像我这种渣 ...

  10. AutoMapper总结

    AutoMapper是一个对象和对象间的映射器.对象与对象的映射是通过转变一种类型的输入对象为一种不同类型的输出对象工作的.让AutoMapper有意思的地方在于它提供了一些将类型A映射到类型B这种无 ...