function extend(child,parent){
var F=function(){}
F.prototype=parent.prototype;
child.prototype=new F();
child.prototype=child;
child.uber=parent.prototype; //uber指向父对象的原型。方便子对象调用父对象原型中的重写的方法。
}
function Shape(){}
Shape.prototype.name="Shape";
Shape.prototype.color="blue"; function circle(radius){
this.radius=radius;
} circle.prototype.name="circle";
circle.prototype.getS=function(){
return this.radius*this.radius*3.14;
}
extend(circle,Shape); var cir=new circle(2);
alert(cir.name); //"circle"
alert(cir.color); //"blue"
alert(cir.uber.name); //"Shape"
alert(cir.getS()) //"12.56"

extend函数的第一个参数是子构造器,第二个参数是父构造器;

为什么子构造器的原型对象不直接指向父构造器的原型对象,是因为若child.prototype=parent.prototype,则会出现父子的原型对象绑定在一起,即父子的原型对象的引用相等,相当于指向同一个地址,改变子对象的原型,父对象的原型也会随之改变,

若遍历父对象的原型和子对象的原型,发现两个完全相同个。

 var cir=new circle(2);
var shape1=new Shape();
cir.prototype.name="this is circle"; for(var i in shape1){
if(!shape1.hasOwnProperty(i)){ //遍历非实例属性
console.log(i+":"+shape1[i]);
}
} //name:circle
//color:blue
//getS:function (){
return this.radius*this.radius*3.14;
} for(var i in cir){
if(!cir.hasOwnProperty(i)){
console.log(i+":"+cir[i]);
}
} //name:circle
//color:blue
//getS:function (){
return this.radius*this.radius*3.14;
}.

JS封装继承函数的更多相关文章

  1. 原生JS封装_new函数,实现new关键字的功能

    1.前言 众所周知:没有对象怎么办?那就new一个! 那么在JS中,当我们new一个对象的时候,这个new关键字内部都干了什么呢? 现在我们就来剖析一下原生JS中new关键字内部的工作原理. 2.原生 ...

  2. js封装each函数

    function each(ele,callback){ if(Object.prototype.toString.call(ele) == "[object Array]"){ ...

  3. Javascript之封装运动函数

    @ 目录 阶段一.仅适用单位带px属性的匀速运动 阶段二.可适用单位不带px属性(如opacity)的匀速运动 阶段三.适用于多元素单一属性的匀速运动 阶段四.适用于多元素单一属性的匀速或缓冲运动 阶 ...

  4. JS封装cookie操作函数实例(设置、读取、删除)

    本文实例讲述了JS封装cookie操作函数.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

  5. 原生JS封装创建多级菜单函数

    手写一个使用原生JS封装的多级菜单的函数,满足以下几点需求. 子类层级不确定,可根据数据自动生成多级菜单. 操作便捷,只需传入一个HTML标签. 缺点: 需要满足特定的数据结构 废话不多说,展示代码. ...

  6. js数据类型的检测总结,附面试题--封装一个函数,输入任意,输出他的类型

    一.javascript 中有几种类型的值 1.基本数据类型 : 包括 Undefined.Null.Boolean.Number.String.Symbol (ES6 新增,表示独一无二的值) 特点 ...

  7. js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)

    js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js function ajax(ur ...

  8. Echart使用js进行封装成函数

    Echart使用js进行封装成函数 主要是对 json 串的封装,使用 js 进行对 json 的解析.之间用的最多是循环取出数组中的值,如果拿去使用可直接修改 json 就好. 上一篇把二维的封装好 ...

  9. 使用原生JS封装一个动画函数

    最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...

随机推荐

  1. appium +android例子

    配置文件: # coding:utf-8 __author__ = 'Helen' """ description:配置全局参数 """ i ...

  2. 利用Python实现倒序任意整数

    这是很早以前学习C时候做过的一个练习题,题目的要求大概是把用户输入的三位数倒序输出,比如说用户输入123,然后程序应该输出的结果是321.如果遇到用户输入100,那么程序应该输出1.然后我给扩展一下, ...

  3. SS7

    在PSTN中各个网络点通过数字信令网交换信息的过程及协议 呼叫流程 SS7 的消息是通过网络点之间的56/64Kbps 的双向通道传送的,这些通道就叫信令链路(signaling links). 信令 ...

  4. JS中将XML转为JSON对象

    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script> <scr ...

  5. Vmtools的安装步骤

    目的:实现win和centos之间的相互复制功能 1.进入centos 2.点击vm菜单的->虚拟机->安装VMware Tools 3.centos会出现一个vm的安装包 4.将文件移动 ...

  6. PZ73H-PZ73X刀闸阀厂家,PZ73H-PZ73X刀闸阀价格 - 专题栏目 - 无极资讯网

    无极资讯网 首页 最新资讯 最新图集 最新标签   搜索 PZ73H-PZ73X刀闸阀 无极资讯网精心为您挑选了(PZ73H-PZ73X刀闸阀)信息,其中包含了(PZ73H-PZ73X刀闸阀)厂家,( ...

  7. hive DML

    1.load files into tables 把文件中的数据加载到表中(表必须先建好) 语法是: load data [local] inpath 'filepath' [overwrite] i ...

  8. lua-nginx-module模块常用命令

    ngx.location.capture 用法: local res = ngx.location.capture(uri, options) 发起一个同步非阻塞的nginx子请求,uri是inter ...

  9. Oracle 分区表(转)

    原文地址:http://love-flying-snow.iteye.com/blog/573303 废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. ...

  10. opensuse13.1 安装chrome报 error while loading shared libraries:libudev.so.0:cannot open shared object file:no file or directory

    1  opensuse13.1 安装chrome时 先用rpm -ivh --test **.rpm 测试安装  安装上缺少的文件 2 但是安装测试通过 却不能启动 原因 缺少一个文件 libudev ...