个人总结: call 继承的是父类私有
prototype 继承的父类公有
create 可以将公有或私有继承到子类上去(克隆)
for in 克隆 不管公有还是私有的都克隆成私有的

1.原型继承:将父类的私有和公有都继承子类的原型上。子类的原型等于父类的实例。(私有公有全部继承)

function A() {
this.name='aaa'
}
A.prototype.x=50;
function B() {
this.age='bbb'
}
B.prototype.y=100;
B.prototype=new A;
var a=new A;
var b=new B;
console.log("xsx------="+b.x); //50
console.log("xsx------="+b.name);//aaa

2.call继承:将父类的私有继承子类的私有。(prototype为公有)

function A() {
this.name='aaa'
}
A.prototype.x=50;
function B() {
this.age='bbb'
A.call(this)
}
B.prototype.y=100;
var a=new A;
var b=new B;
console.log("xsx------="+b.x); //undefined
console.log("xsx------="+b.name); //aaa

3.冒充对象继承:将父类的私有和公有都继承子类私有的。

function A() {
this.name = 'aaa'
}
A.prototype.x = 50;
function B() {
this.age = 'bbb'
var teme = new A
for (var k in teme) {
this[k]=teme[k]
}
}
B.prototype.y = 100;
var a = new A;
var b = new B;
console.log("xsx------=" + b.x); //50
console.log("xsx------=" + b.name);//aaa

4.混合继承:将父类私有继承子类私有,再将父类的私有和公有继承子类公有。采用call继承和原型继承,私有被继承两次。

function A() {
this.name = 'aaa'
}

A.prototype.x = 50;

function B() {
this.age = 'bbb'
A.call(this) //call 是用来继承私有的
}

B.prototype.y = 100;
B.prototype = new A;
var a = new A;
var b = new B;

console.log("xsx------=" + b.name);//aaa

5.组合继承:私有继承私有,公有继承公有

function A() {
this.name = 'aaa'
}

A.prototype.x = 50;

function B() {
this.age = 'bbb'
A.call(this) //call 是用来继承私有的
}
B.prototype =Object.create(A.prototype); //继承私有
B.prototype.y = 100;

var a = new A;
var b = new B;

console.log("xsx------=" + b.name);//aaa

Javascript 继承和克隆的更多相关文章

  1. 2018/1.6 Javascript 继承和克隆

    这种写法不是对象克隆,就是把obj的内存地址赋给obj2 通过 for in 克隆 不管公有还是私有的都克隆成私有的. js提供了一个克隆方法 objct.create() var obj2=obje ...

  2. javascript继承的三种模式

    javascript继承一般有三种模式:组合继承,原型式继承和寄生式继承: 1组合继承:javascript最为广泛的继承方式通过原型链实现对原型属性和方法的继承,通过构造函数实现对实例属性的继承,同 ...

  3. javascript继承机制的设计思想(ryf)

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  4. 【读书笔记】javascript 继承

    在JavaScript中继承不像C#那么直接,C#中子类继承父类之后马上获得了父类的属性和方法,但JavaScript需要分步进行. 让Brid 继承 Animal,并扩展自己fly的方法. func ...

  5. 图解JavaScript 继承

    JavaScript作为一个面向对象语言,可以实现继承是必不可少的,但是由于本身并没有类的概念(不知道这样说是否严谨,但在js中一切都类皆是对象模拟)所以在JavaScript中的继承也区别于其他的面 ...

  6. JavaScript强化教程——Cocos2d-JS中JavaScript继承

    javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...

  7. [原创]JavaScript继承详解

    原文链接:http://www.cnblogs.com/sanshi/archive/2009/07/08/1519036.html 面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++. ...

  8. javascript继承(六)—实现多继承

    在上一篇javascript继承—prototype最优两种继承(空函数和循环拷贝)(3) ,介绍了js较完美继承的两种实现方案,那么下面来探讨一下js里是否有多继承,如何实现多继承.在这里可以看看j ...

  9. javascript继承(五)—prototype最优两种继承(空函数和循环拷贝)

    一.利用空函数实现继承 参考了文章javascript继承—prototype属性介绍(2) 中叶小钗的评论,对这篇文章中的方案二利用一个空函数进行修改,可以解决创建子类对象时,父类实例化的过程中特权 ...

随机推荐

  1. nodeJs学习路线

    转载自:http://blog.fens.me/nodejs-roadmap/ 前言 用Nodejs已经1年有余,陆陆续续写了48篇关于Nodejs的博客文章,用过的包有上百个. 和全部人一样,我也从 ...

  2. Android严苛模式StrictMode使用详解

    StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...

  3. CSS响应式布局到底是什么?

    响应式布局是最近几年在前端开发中非常火热的词,它是相对于固定像素大小的网页而言的,那么CSS响应式布局到底是什么?顾名思义,响应式布局就是网页能够响应各种各样不同分辨率大小的设备,能够将网页很好的呈献 ...

  4. 图解RHEL6从安装光盘中进行yum安装

    图解RHEL6从安装光盘中进行yum安装 导读:我们这里讲的Yum,是Yellow dog Updater, Modified的缩写,可执行程序名为yum,它的理念是使用一个中心仓库(reposito ...

  5. Android中Gallery和ImageSwitcher同步自动(滚动)播放图片库

    本文主要内容是如何让Gallery和ImageSwitcher控件能够同步自动播放图片集 ,看起来较难,然而,实现的方法非常简单, 请跟我慢慢来.总的来说,本文要实现的效果如下图:(截图效果不怎么好) ...

  6. 关于vs2012/2013的C编译器生成的exe的向后兼容xp的问题

    问题一:编译出来的exe在xp上面运行提示"不是有效的win32应用程序" 在vs2012/2013版本里面,其自带的c编译器cl.exe,若直接使用cl a.c编译,那么生成出来 ...

  7. 【Henu ACM Round#18 C】Ilya and Sticks

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用cnt[i]记录数字i出现的次数就好. 然后i从1e6逆序到1 如果cnt[i+1]和cnt[i]>0同时成立的话. 那么得 ...

  8. Floodlight中 处理packetin消息的顺序(2)

         前面通过阅读代码知道了怎样推断各个模块处理某个消息的先后顺序.那么内部是怎样实现的呢?      每当一个模块表示对一个消息感兴趣的时候,就会调用IFloodlightProviderSer ...

  9. Extjs 4.2 设置buttontext为中文

    能够在Ext.QuickTips.init();后增加例如以下代码: Ext.MessageBox.buttonText = { ok : "确定", cancel : " ...

  10. 版本号控制-搭建gitserver

    GitHub是一个免费托管开源码的Gitserver,假设我们不想公开项目的源码,又不想付费使用.那么我们能够自己搭建一台Gitserver. 以下我们就看看,怎样在Ubuntu上搭建Gitserve ...