最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式。

一、prototype方式

当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个prototype属性,prototype包含一个constructor对象

而constructor便是该新函数对象(constructor意义不大,但是可以帮我们找到继承关系)

每个函数都会有一个prototype属性,该属性指向另一对象,这个对象包含可以由特定类型的所有实例共享的属性和方法

每次实例化后,实例内部都会包含一个[[prototype]](__proto__)的内部属性,这个属性指向prototype

(以上图片取自叶小钗博客)

二、copy方式

function extend(child,parent)//通过临时构造器继承
{
var f=function(){};
f.prototype=parent.prototype;
child.prototype=new f();
child.prototype.constructor=child;
child.uber=parent.prototype;//uber 类似其他语言里的SuperClass
} function extend2(child,parent)//传递superclass
{
var c=child.prototype;
var p=parent.prototype;
for(var v in p)
{
c[v]=p[v];
}
child.uber=parent.prototype;
} function extendcopy(parent)
{
var temp={};
for(var t in parent)
{
temp[t]=parent[temp];
}
temp.uber=parent;
return temp;
} function deepcopy(child,parent)
{
var c=child||{};
for(var t in parent)
{
if(typeof parent[t]==="object")
{
c[t]=(parent[t].constructor==="Array")?[]:{};
deepcopy(c[t],parent[t]);
}
else
{
c[t]=parent[t];
}
}
return c;
} function objectextend(o)
{
function f(){};
f.prototype=o;
return new f();
}
function objectextend2(o)
{
function f(){};
f.prototype=o;
var n=new f();
n.uber=o;
return n;
} function extendcopyplus(o,stuff)
{
function f(){};
f.prototype=o;
var n=new f();
n.uber=o;
for(var t in stuff)
{
n[t]=stuff[t];
}
return n;
}

至于哪种方式更好,完全取决于自己的意愿。

jquery使用的就是深拷贝~

总结javascript继承的两种方式的N中写法的更多相关文章

  1. javascript 继承的两种方式

    js中继承可以分为两种:对象冒充和原型链方式 一.对象冒充包括三种:临时属性方式.call()及apply()方式1.临时属性方式 代码如下: function Person(name){     t ...

  2. Flex(ActionScript)与JavaScript交互的两种方式示例

    随着各单位部门信息化进程的不断发展,互通互联.共享协调不断的被越来越多的客户所重视.很多新项目都要去必须能够集成已有的早期系统,至少也要能够实现交互对接.今天跟大家分享的是系统对接中ActionScr ...

  3. js实现继承的两种方式

    这是面试时面试官会经常问到问题: js的继承方式大致可分为两种:对象冒充和原型方式: 一.先说对象冒充,又可分为3种:临时属性方式.call().apply(): 1.临时属性方式: 当构造对象son ...

  4. js-使用JavaScript、jQuery两种方式实现全选/全不选

    html代码 <input type='checkbox' value="10" name="frust"/>苹果10元 <br/> & ...

  5. 模块化Javascript代码的两种方式

    1.将模块整体放在函数里 function buildMonthNameModule() { var names = ["January ", "February&quo ...

  6. python类的继承的两种方式

    class Animal(object): """docstring for Animal""" def __init__(self, na ...

  7. JavaScript输出的两种方式

    var a="Hello World" document.write(a) //在网页上输出:Hello World var a="Hello World" c ...

  8. .Net反射-两种方式获取Enum中的值

    public enum EJobType { 客服 = , 业务员 = , 财务 = , 经理 = } Type jobType = typeof(EJobType); 方式1: Array enum ...

  9. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

随机推荐

  1. .net常見面試題(四)

    1. .Net.C#.VisualStudio之间的关系是什么? .Net一般指的是.Net Framework,提供了基础的.Net类,这些类可以被任何一种.Net编程语言调用,.Net Frame ...

  2. mysql忘记帐号密码 解决办法

    首先关闭mysql 使用命令行启动mysql(一般要找到mysql.ini文件) 在windows上mysql.ini文件可以通过查看当前mysql进程参数查看到,具体方法点此 在启动mysql命令行 ...

  3. 【转】腾讯OCR—自动识别技术,探寻文字真实的容颜

    文字,一种信息记录的图像符号,千年来承载了太多的人类文明印记.OCR,一种自动解读这种图像符号的技术,一直以来都备受关注.尤其在信息时代的今天,数字图像纷繁复杂,如何便捷高效的获取其中的文字信息,更有 ...

  4. hdu 4758 Walk Through Squares

    AC自动机+DP.想了很久都没想出来...据说是一道很模板的自动机dp...原来自动机还可以这么跑啊...我们先用两个字符串建自动机,然后就是建一个满足能够从左上角到右下角的新串,这样我们直接从自动机 ...

  5. 001-python基础

    1.Python是什么样的语言? 1.1语言的分类: 编译型 解释型 混合型 编译型: 优点:编译器一般会有预编译的过程对代码进行优化. 因为编译只做一次,运行时不需要编译,所以编译型 语言的程序执行 ...

  6. ZBar只扫描二维码/条形码

    You can add these codes for ImageScanner scanner.setConfig(0, Config.ENABLE, 0); //Disable all the S ...

  7. leetcode第一刷_Triangle

    非常easy的一道DP,看到空间限制是O(N)的,不要习惯性的以为是要保存每一行的最小值,不难想到是要保存一行其中各个数为路径终点时的和的大小.当算到最后一行时,就是从顶部究竟部以这个底部位置为终点的 ...

  8. UVA10518 - How Many Calls?(矩阵高速幂)

    UVA10518 - How Many Calls?(矩阵高速幂) 题目链接 题目大意:给你fibonacci数列怎么求的.然后问你求f(n) = f(n - 1) + f(n - 2)须要多少次调用 ...

  9. C# StringExt 字符串扩展

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  10. winows 进程通信的实例详解

    发送端: 新建一个基本对话框工程,添加6个文本框控件,并且关联控件变量(CString类型):  m_strCopyData, m_strFileMap, m_strMem, m_strRegMsg, ...