javascript:将类继承过程进行封装的工具代码

问题描述

function extend(Sub,Sup){//类继承封装函数    var F=function(){};//定义一个空函数    F.prototype=Sup.prototype;//设置空函数的原型为超类的原型    Sub.prototype=new F();//实例化空函数,并把超类原型引用传递给子类    Sub.prototype.constructor=Sub;//恢复子类原型的构造器为子类自身    Sub.sup=Sup.prototype;//在子类中存储超类原型,避免子类和超类耦合    if(Sup.prototype.constructor===Object.prototype.constructor){//检测超类原型构造器是否为自身        Sup.prototype.constructor=Sup;//类继承封装函数    }}Sub.sup=Sup.prototype;//在子类中存储超类原型,避免子类和超类耦合这行代码有什么用呢?我甚至画了个继承图,发现Sub是能访问到Sup的原型的,为啥还要在子类Sub中加一个sup变量来保存父类Sub的原型呢?咋就避免耦合了

解决方案

这样可以 直接在子类中使用sup得到父亲的原型 不需要关心父类是谁 这不就相当于解耦了。你的这段代码是由问题的 如function extend(Sub,Sup){//类继承封装函数 var F=function(){};//定义一个空函数 F.prototype=Sup.prototype;//设置空函数的原型为超类的原型var newPrototype = new F();for(var prop in Sub.prototype) {//此处需要拷贝Sub的prototype 否则父类覆盖子类 newPrototype[prop] = Sub.prototype[prop];} Sub.prototype=Sub.prototype;//实例化空函数,并把超类原型引用传递给子类 Sub.prototype.constructor=Sub;//恢复子类原型的构造器为子类自身 Sub.sup=Sup.prototype;//在子类中存储超类原型,避免子类和超类耦合 if(Sup.prototype.constructor===Object.prototype.constructor){//检测超类原型构造器是否为自身 Sup.prototype.constructor=Sup;//类继承封装函数 }}function Child() {}Child.prototype.hello = function() {alert("Child hello");}function Parent() {}Parent.prototype.hello = function() {alert("Parent hello");}extend(Child, Parent)var child = new Child();child.hello();
解决方案二:
假如没有那句,当需要并且改动sub的prototype时,就找不到sup的prototype了。

时间: 2025-01-20 14:10:36

javascript:将类继承过程进行封装的工具代码的相关文章

再论Javascript的类继承_javascript技巧

无参数类继承的问题 先看一段示例代码,实现B继承于A: 复制代码 代码如下: function A() { } A.prototype.a1 = function() { }; function B() { } B.prototype = new A(); B.prototype.b1 = function() { }; var b = new B(); alert(b.constructor == A); // true alert(b.constructor == B); // false

Javascript无参数和有参数类继承问题解决方法

 这篇文章主要介绍了Javascript无参数和有参数类继承问题解决方法,本文讲解了无参数类继承的问题和有参类继承的问题,并给出了解决方案,需要的朋友可以参考下     说到Javascript的类继承,就必然离不开原型链,但只通过原型链实现的继承有着不少缺陷. 无参数类继承的问题 先看一段示例代码,实现B继承于A: 代码如下: function A() { } A.prototype.a1 = function() { };   function B() { } B.prototype = n

Javascript无参数和有参数类继承问题解决方法_javascript技巧

说到Javascript的类继承,就必然离不开原型链,但只通过原型链实现的继承有着不少缺陷. 无参数类继承的问题 先看一段示例代码,实现B继承于A: 复制代码 代码如下: function A() { } A.prototype.a1 = function() { }; function B() { } B.prototype = new A(); B.prototype.b1 = function() { }; var b = new B(); alert(b.constructor == A

javascript类继承机制的原理分析_js面向对象

目前 javascript的实现继承方式并不是通过"extend"关键字来实现的,而是通过 constructor function和prototype属性来实现继承.首先我们创建一个animal 类 js 代码 复制代码 代码如下: var animal = function (){ //这就是constructor function 了 this .name = 'pipi'; this .age = 10; this .height = 0; } //建立一个动物的实例 var

javascript类继承的一些实验

其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个 函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话就很麻烦(不好意思,对于我这种新手,开始还是一般用func比较高效率···).所以 就决定开始要用object来编程才能更省事,下面就是我看了一些博客文章关于类的见解,有什么不对的希望各位可以多多给些指点: 对于类的编程,声明的方法有如下几种:1.var test = function(){};2

JavaScript 高级篇之闭包、模拟类,继承(五)_javascript技巧

一.javascript中的闭包 1.我们一起先来理解什么是函数的作用域. 2.调用的对象 结合例子: 复制代码 代码如下: function display(something) { function executeDisplay1() { document.write("我在帮老板打印:"+something+"<br />");//引用外部函数的something参数 } executeDisplay1();//函数display引用了内部函数 }

JavaScript中的类继承_javascript技巧

JavaScript Inheritance DouglasCrockfordwww.crockford.com And you think you're so clever and classless and free--John Lennon JavaScript一种没有类的,面向对象的语言,它使用原型继承来代替类继承.这个可能对受过传统的面向对象语言(如C++和Java)训练的程序员来说有点迷惑.JavaScript的原型继承比类继承有更强大的表现力,现在就让我们来看看. Java Jav

JavaScript类继承及实例化的方法_javascript技巧

本文实例讲述了JavaScript类继承及实例化的方法.分享给大家供大家参考.具体如下: (function(){ var Class = { //扩展类 create: function(aBaseClass, aClassDefine){ var $class = function(){ for(var member in aClassDefine){ this[member] = aClassDefine[member]; } if('undefined'===typeof aClassD

旧文新帖(First out:2008-06-07):JavaScript“类”继承的横向比较

本文最早发表于2008-06-07 首入眼帘,代码: /** * Utility to set up the prototype, constructor and superclass properties to * support an inheritance strategy that can chain constructors and methods. * Static members will not be inherited. * * @method extend * @static