关闭

js函数(类)的继承机制的设计与实现(四)

标签: 继承设计函数class
188人阅读 评论(0) 收藏 举报
分类:

一 继承机制的完善,访问被重写的父函数方法

  • 在“js函数(类)的继承机制的设计与实现”中,我们提到一个问题,即如果子函数中的方法名称与父函数中的方法名称一样,则子函数中的该方法会重写父函数的方法。我们都知道,在C++中,子类可以通过Parent::funx()的方式来访问被重写的父类方法,在java中则是通过super()来实现。那么,在本文提出的js继承机制中,如何来实现同样的功能呢?测试代码如下:
            function test(){
                var b = B().instantiate();
                b.callname();
            }

            function A(){
                var obj_this = this;

                obj_this.name_a = "A";
                obj_this.instantiate = function(){
                    obj_this = new A();
                    obj_this.assign(obj_this);
                    return obj_this;
                };
                obj_this.assign = function(obj){
                    obj_this = obj;
                };
                obj_this.callname = function(){
                    console.log("我是父函数:A");
                }
                return obj_this;    
            }
            function B(){
                var obj_this = this;

                obj_this.name_b = "B";
                obj_this.instantiate = function(){
                    B.prototype = A().instantiate();
                    B.prototype.construct = B;
                    obj_this = new B();
                    obj_this.assign(obj_this);
                    obj_this.obj_parent = B.prototype;//添加一个属性,指向父函数实体
                    return obj_this;
                };
                this.assign = function(obj){
                    obj_this = obj;
                };
                obj_this.callname = function(){
                    console.log("我是子函数:B");
                    obj_this.obj_parent.callname();//调用父函数的callname()函数
                }
                return obj_this;
            }
  • 测试结果:

这里写图片描述

  • 也就是说,通过在实例化instantiate()中为obj_this指针添加一个指向父函数实体的obj_parent属性即可实现本文开始提出的功能。

二 完善本文提出的继承机制模板

  • 为了在本文提出的继承机制中实现子函数访问被重写的父函数方法的功能,本文基于“js函数(类)的继承机制的设计与实现(二)”中完善的模板进行再次完善。结果如下:
            //js函数继承机制实现的模板规范。

            //没有继承任何函数的函数规范定义
            function parent_function(){
                var obj_this = this;
                obj_this.instantiate(){
                    obj_this = new parent_function();
                    obj_this.assign(obj_this);
                    return obj_this;
                };
                obj_this.assign = function(obj){
                    obj_this = obj;
                };
                /...
                your code are written here
                用obj_this完全代替this指针
                .../
                return obj_this;
            }

            //继承了父函数的子函数的函数规范定义
            function your_function(){
                var obj_this = this;
                obj_this.instantiate(){
                    your_function.prototype = parent_function().instantiate();//继承父函数
                    your_function.prototype.construct = your_function;
                    obj_this = new your_function();
                    obj_this.assign(obj_this);//将本身赋值给自己包含的obj_this,相当于obj_this.obj_this = obj_this
                    obj_this.obj_parent = your_function.prototype;//通过obj_parent属性指向父函数实体
                    return obj_this;
                };
                obj_this.assign = function(obj){//将本身赋值给自己包含的obj_this,相当于obj_this.obj_this = obj_this

                    obj_this = obj;
                };

                /...
                your code are written here
                用obj_this完全代替this指针,并可通过obj_this.来访问父函数和本函数的所有公有属性和方法。
                当子函数重写父函数方法时,可以通过obj_this.obj_parent.访问被重写的父函数的方法
                .../

                return obj_this;
            }
  • 本次完善与“js函数(类)的继承机制的设计与实现(二)”中的模板相比,增加了可以通过obj_this.obj_parent访问被重写的父函数的能力。
0
0
查看评论

js函数(类)的继承机制的设计与实现

一、背景与问题 根据项目需求,领导分给我一个任务,即设计一组基于Microsoft VML技术的图表控件,形成通用、可扩展、可移植的图表控件。简单来说,就是要我做一个类似于Highcharts的图表控件,当然图表的种类没有Highcharts那么丰富,目前主要包含了饼状图、柱状图、折线图和箱线图等。...
  • u012409928
  • u012409928
  • 2016-05-01 16:41
  • 6266

js函数(类)的继承机制的设计与实现(三)

本文将介绍如何在本文设计的js继承机制实现模板中,通过obj_this来修改父亲函数的属性。 正常情况下,无法通过obj_this修改父函数的属性值。测试代码如下: function test(){ var b = B().instan...
  • u012409928
  • u012409928
  • 2016-05-05 19:43
  • 259

js函数(类)的继承机制的设计与实现(二)

为了使得上一篇文章“js函数(类)的继承机制的设计与实现”中的继承模板更加规范,本文对其进行了修改。修改结果如下: //js函数继承机制实现的模板规范。 //没有继承任何函数的函数规范定义 function parent_function(){ ...
  • u012409928
  • u012409928
  • 2016-05-03 19:42
  • 307

js函数(类)的继承机制的设计与实现(五)

最近我一直在思考如何完善本文提出的js继承实现机制。我们知道,面向对象的好处之一是其封装性,能够保护对象内部的数据与结构。但是,在之前本文给出的js继承实现机制模板中,obj_this.assign(this_obj)函数的存在破坏了封装性。设计之初,我是希望assign(this_obj)作为一个...
  • u012409928
  • u012409928
  • 2016-06-15 19:42
  • 280

“Ceph浅析”系列之四——Ceph的工作原理及流程

原文在 http://yizhaolingyan.net/?p=63, 感谢作者 @一棹凌烟         本文将对Ceph的工作原理和若干关键工作流程进行扼要介绍。如前所述,由于Ceph的功能实现本质上依托于...
  • scaleqiao
  • scaleqiao
  • 2015-06-08 17:09
  • 1199

python3.3 类与继承 小例

class Base: def __init__(self): self.data=[] def add(self,x): self.data.append(x) def addtwice(self,x): self.add(x) self.add(x) # child ex...
  • keenweiwei
  • keenweiwei
  • 2013-06-06 11:12
  • 3410

抽象类,接口继承与实现关系

1.接口    接口相当于一个比抽象类更加抽象的事务,它本身不能有变量,只能持有静态常量和抽象方法,虽然接口定义方法可以不用添加abstract关键词,但是默认是抽象的,所以不能实现之    一个接口可以继承一个或者多个接口,但不能去实现它或者它们,因为实...
  • linshao512
  • linshao512
  • 2012-10-05 19:47
  • 5088

JavaScript如何实现面向对象和继承机制?

JavaScript实现面向对象?  function MyObject() {    this.name="myobject";    this.type="class";    this...
  • u012575451
  • u012575451
  • 2016-10-02 13:23
  • 682

java继承类与实现接口

java 继承 接口
  • hy771213
  • hy771213
  • 2017-03-29 22:56
  • 1839

C++类的继承特性

整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中增加原有类中没有的成分。下面我们简单的来说一下继承的概念,先看下图: 上图是一个抽象描述的特性继承表   交通工具是一个基类(也...
  • wu20093346
  • wu20093346
  • 2014-08-04 15:10
  • 1295
    个人资料
    • 访问:9077次
    • 积分:176
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类