`
xwood
  • 浏览: 103061 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JS继承与重载

 
阅读更多
js学习笔记(类的继承、重载)
2009-03-29 17:19

一、对象冒充:构造函数使用this关键字给所有属性和方法赋值。因为构造函数只是一个函数,所以可以使用ClassA的构造函数成为ClassB的方法,然后调用它,ClassB就会收到ClassA的构造函数中定义的属性和方法。但需要注意的是,当继承生成新的方法使用后应当删除,不至影响新的方法的创建。
1>普通对象冒充:
如:
function ClassA(sColor){
    this.color = sColor;
    this.sayColor = function(){
        alert(this.color);
    };
}

function ClassB(sColor){
    this.newMethod = ClassA;
    this.newMethod(sColor);
    delete this.newMethod;
}


2>call()方法:call(obj,var1,var2,……);call的第一个参数用途this,其它的参数传递给函数本身;
如:

function ClassB(sColor,sName){
    ClassA.call(this,sColor);
    this.name = sName;
    this.sayName = function (){
        alert(this.name);
    };
}


3>apply()方法:apply(obj,arr),第一个参数是用作this的参数,第二个参数是一个传递给函数的参数的数组。
如:
function ClassB(sColor,sName){
    ClassA.apply(this, new Array(sColor));
    this.name = sName;
    this.sayName = function(){
        alert (this.name);
    }
}


二、原型链:由于prototype对象的任何属性和方法都被传给那个类的所有实例,原型链利用利用这种功能来实现继承机制。
如:
function ClassA(){}
ClassA.prototype.color = "red";
ClassA.prototype.sayColor = function(){
    alert(this.color);
};

function ClassB(){}
ClassB.prototype = new ClassA();
ClassB.name = "";
ClassB.prototype.sayName = function (){
    alert(this.name);
}


三、混合方式:用对象冒充继承构造函数的属性,用原型链继承prototype对象的方法。
如:
function ClassA(sColor){
    this.color = sColor;
}
ClassA.prototype.sayColor = function(){
    alert(this.color);
}
function ClassB(sColor,sName){
    ClassA.call(this,sColor);
    this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function(){
    alert(this.name);
}


四、利用zInherit库:zInherit库主要有两个方法用于继承;inheritFrom(class),用于复制class指定的类的所有属性和方法,但是不创建自身实例,也不重写prototype对象,以可以用于动态原型支持,同时也可以实现多重继承;这种方法在使用时需要引入zinherit.js文件;
如:
function ClassA(sColor){
    this.color = sColor;
    if(typeof ClassA._initialized == "undefined"){
        ClassA.prototype.sayColor = function(){
        alert(this.color);
        }
        ClassA._initialized = true;
    }
}

function ClassB(sColor,sName){
    ClassA.call(this,sColor);
    this.name = sName;
    if(typeof ClassB._initialized == "undefined"){
        ClassB.prototype.inheritFrom(ClassA);
        ClassB.prototype.sayName = function(){
            alert(this.name);
        }
        ClassB._initialized = true;
    }
}
分享到:
评论

相关推荐

    Java的继承、重载和多态.doc

    6. **子类与父类属性**:在给定的`Monkey`和`People`类中,子类`People`并没有显示继承`Monkey`的`age`属性。要让`People`继承`Monkey`的所有属性,可以将`age`声明为`protected`或`public`,而不是`private`。 7. ...

    javascript中类和继承(代码示例+prototype.js)

    本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行解析。 ### 类的概念与模拟 在JavaScript中,我们通常使用函数来模拟类的行为。一个函数可以看作是一个类的定义,通过`new`关键字来...

    Java方法继承、方法重载、方法覆盖小结.doc

    Java 方法继承、方法重载、方法覆盖、小结 Java 编程语言中,方法继承、方法重载、方法覆盖是三个重要的概念,它们在软件开发中发挥着重要作用。 方法继承 方法继承是 Java 编程语言的一种机制,允许一个类继承另...

    js继承 Base类的源码解析

    在JavaScript中,继承是一种核心机制,它允许创建新的...它处理了函数重载、特殊方法的保护以及对象属性的复制,使得开发者能够轻松地构建类的继承结构。理解这个源码对于深入学习JavaScript的面向对象编程非常有帮助。

    javascript 面向对象,实现namespace,class,继承,重载

    但是我前些日子也改过些许客户端的小bug,确实那代码看得让人有些云里雾里,不知身在哪山,轻易不敢动代码,于是就自己动手鼓捣起我曾又爱又恨的javascript来,自己写一个简单的js实现namespace,继承,重载等面向...

    js图片大小重载插件

    JavaScript 图片大小重载插件,通常用于优化网页性能,特别是在响应式设计中,能够根据设备屏幕尺寸自动调整图片大小,提高页面加载速度并节省用户流量。jQuery Resize Plugin 是一个由 Adeel Ejaz 创建的优秀插件,...

    JavaScript中的继承之类继承_.docx

    与传统的面向对象语言如Java或C#不同,JavaScript的继承模型基于原型,这使得它的继承机制既灵活又强大。本文将详细介绍JavaScript中的类继承概念,包括基本原理、实现方式以及一些高级用法。 #### 二、继承概述 ...

    让 JavaScript 轻松支持函数重载 (Part 2 - 实现)

    3. 签名匹配算法:函数调用时,需要将调用参数与签名进行匹配,以找到合适的重载。匹配算法需要考虑参数个数、参数类型和最佳匹配规则。通常,算法先通过参数数量排除掉不匹配的重载,然后通过类型兼容性进一步排除...

    Javascript面向对象扩展库(lang.js)

    总结来说,`lang.js`是JavaScript开发者的一个强大工具,它通过提供面向对象的扩展,使得开发者可以在JavaScript中更加方便地实现类的定义和函数重载,提升代码的可维护性和可读性。通过阅读源码和示例,开发者可以...

    JS重载实现方法分析

    重载是面向对象语言里很重要的一个特性,JS中没有真正的重载,是模拟出来的(因为js是基于对象的编程语言,不是纯面向对象的,它没有真正的多态:如继承、重载、重写) 一、什么时候用重载? 举例: function ...

    Javascript实现运算符重载详解

    JavaScript中的运算符重载是一种模拟C++或C#等语言中运算符重载的方法,由于JavaScript本身不支持运算符重载,因此需要通过特定的技巧来实现。在本例中,作者采用了一种称为“代码解释”的技术,即通过编写一个函数...

    JavaScript 继承 封装 多态实现及原理详解

    在JavaScript中,面向对象编程(OOP)的三大特性为封装、继承和多态。以下是对这些特性的详细介绍,以及在JavaScript中如何实现和原理的探讨。 封装是面向对象编程的基石之一。它通过类(class)的概念将数据(属性...

    javascript面向对象之Javascript 继承

    上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...

    webview重载使用&自定义网址_android代码.zip

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现与网页的交互。本文将深入探讨WebView的重载使用及如何自定义网址,以帮助开发者更好地理解和应用这一功能。 首先,我们...

    java中的继承(子类调用父类构造方法还不懂).doc

    重写是类与类之间的关系,两者必须是继承关系。 2. 关键字 `super`:在 Java 类中使用 `super` 来引用父类的成分。`super` 可用于访问父类中定义的属性、调用父类中定义的成员方法、在子类构造方法中调用父类的构造...

    JavaScript中的继承之类继承

    与其他面向对象语言不同,JS的继承机制是基于原型(prototype)的,这使得其继承方式更为灵活,但同时也更加复杂。本文将深入探讨JavaScript中的类继承,以及如何通过不同的方法来实现它。 首先,我们需要了解...

    Unity3D中JavaScript与C#对比

    Unity3D中JavaScript与C#对比 Unity3D 中 JavaScript 与 C#对比是游戏开发和互动项目制作中一个常见的问题。许多开发者特别是新手都会纠结于到底该用哪种语言比较好。以下是老外对 Unity3D 中这两种语言进行的一个...

    继承和接口和java访问权限修饰符总结.doc

    继承是 Java 中的一种机制,允许子类继承父类的属性和方法,並且可以对父类的方法进行重写或重载。动态绑定是指在运行时确定方法的调用,而不是在编译时。多态性是通过继承和方法重写来实现的。 一、继承 继承是 ...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    2. **继承**:继承是一种通过扩展已存在的类来创建新类的方式。子类可以继承父类的属性和方法,并且可以添加新的属性和方法或者覆盖父类中的方法,从而实现代码复用和功能的增强。 3. **多态**:多态是指允许不同类...

Global site tag (gtag.js) - Google Analytics