// 拷贝继承,在子类内调用父类并修正this指向,再通过for in 拷贝父类的方法实现继承,具体实现如下代码 :
function Tab(){//父类构造函数
this.name='aaa';
this.age=20;
}
Tab.prototype.init = function(){
alert(this.name);
};
function Child(){//子类构造函数
Tab.call(this);//在子类构造函数内调用父类,使子类继承父类的属性
}

for(var attr in Tab.prototype){//通过for in 拷贝父类原型上的方法
Child.prototype[attr]=Tab.prototype[attr];
}
var child=new Child();
var tab=new Tab();
child.name="bbb";//这里我们修改了子类的属性,下面打印结果,修改了子类不会影响父类
console.log(tab)
console.log(child)

console.log(child instanceof Tab);//false
console.log(child instanceof Child);//true 看出,child的构造函数还是自己本身

//原型继承,在子类的原型上继承父类的实例化对象 :

var father=function(){
this.name='aa';
}
father.prototype.a=function(){
alert(this.name);
}
var child=function(){}

var fa=new father();

child.prototype=fa;//在子类的原型上继承父类这个对象

var man=new child();
man.name='bbb';
fa.name="ccc";
console.log(fa);
console.log(man);//继承的属性和值在其原型链上
alert(fa.name)//ccc
alert(man.name)//bbb

//类式继承,通过在子类的构造函数类调用父类的构造函数,使子类拥有父类的属性和方法,并通过call或apply改变this指向,来实现继承 : 

var father=function(){
this.name='aa';

this.age=function(){alert(1)}
}
father.prototype.a=function(){
alert(this.name);
}
var child=function(){
father.call(this);
}

child.prototype=father.prototype;//继承父类的方法

var f=new father();
var c=new child();
console.log(f);
console.log(c);

javascript 继承之拷贝,原型,类式的更多相关文章

  1. 精读JavaScript模式(八),JS类式继承

    一.前言 这篇开始主要介绍代码复用模式(原书中的第六章),任何一位有理想的开发者都不愿意将同样的逻辑代码重写多次,复用也是提升自己开发能力中重要的一环,所以本篇也将从“继承”开始,聊聊开发中的各种代码 ...

  2. JS面向对象组件 -- 继承的其他方式(类式继承、原型继承)

    继承的其他形式: •类式继承:利用构造函数(类)继承的方式 •原型继承:借助原型来实现对象继承对象   类 : JS是没有类的概念的 , 把JS中的构造函数看做的类 要做属性和方法继承的时候,要分开继 ...

  3. Javascript继承5:如虎添翼----寄生式继承

    /* * 寄生式继承 * 其实就是对原型继承的第二次封装,在封装过程中对继承的对象进行了扩展. * 也存在原型继承的缺点!! * 这种思想的作用也是为了寄生组合式继承模式的实现. */ //声明基对象 ...

  4. 【前端知识体系-JS相关】深入理解JavaScript原型(继承)和原型链

    1. Javascript继承 1.1 原型链继承 function Parent() { this.name = 'zhangsan'; this.children = ['A', 'B', 'C' ...

  5. js面向对象--类式继承

    //待研究//类式继承 //js中模拟类式继承的3个函数 //简单的辅助函数,让你可以将新函数绑定到对象的 prototype 上 Function.prototype.method = functi ...

  6. javascript继承的6种方法

    1原型式继承 简介:对类式继承的封装,过渡对象相当于子类. function inheritObject(o) { //声明过渡函数对象 function F() {} //过渡对象的原型继承父类 F ...

  7. JavaScript 类式继承与原型继承

    交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...

  8. javascript类式继承模式#4——共享原型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. javascript类式继承模式#3——借用和设置原型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. J2EE概念汇总

    JVM 是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟 ...

  2. JS 有一张0.0001米的纸,对折多少次可以达到珠穆朗玛峰的高度8848;

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. MySQL 关闭 binlog 日志

    [关闭binlog日志] 1.vim /etc/my.cnf 注释如下内容: #log-bin=mysql-bin #binlog_format=mixed #server-id = 1 #expir ...

  4. 使用json_decode无法解析json

    在接入合作方接口时,遇到一个json无法解析出来代码如下: <?php $res='{"resultcode":007,"resMsg":"!& ...

  5. 对于 wepy 不是内部或外部命令 -- 的解决办法

    闲来没事继续研究自己之前一直未解决的问题,  就是自己笔记本安装wepy-cli,一直提示"wepy 不是内部或外部命令". 因为公司里面用的是这个框架, 想着自己在家没事的时候去 ...

  6. 进入docker 容器内命令

    docker exec :在运行的容器中执行命令 语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...] OPTIONS说明: -d :分离模式: 在后 ...

  7. "随笔"列表 - 按时间先后顺序排列

    这是一个测试 linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器 美化博客园 virtual box虚拟机在linux下设置共享文件夹 纯净版linux (debian)挂载Virtua ...

  8. js 数组 : 差集、并集、交集、去重

    //input:[{name:'liujinyu'},{name:'noah'}] //output:['liujinyu','noah'] Array.prototype.choose = func ...

  9. DebugBar v7.0.2 注册码

    blog.sina.com.cn/seoerx 14d4fb95f89bdd277fff0d20910be400 seoerx.diandian.com 505dc8424062f9895c2dd14 ...

  10. 5.3.5 namedtuple() 创建命名字段的元组结构

    在命名元组里.给每一个元组的位置加入一个名称,而且能够通过名称来訪问.大大地提高可读性,以便写出清晰代码,提高代码的维护性.事实上它就像C++里的结构体. collections.namedtuple ...