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;
}
}
分享到:
相关推荐
6. **子类与父类属性**:在给定的`Monkey`和`People`类中,子类`People`并没有显示继承`Monkey`的`age`属性。要让`People`继承`Monkey`的所有属性,可以将`age`声明为`protected`或`public`,而不是`private`。 7. ...
本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行解析。 ### 类的概念与模拟 在JavaScript中,我们通常使用函数来模拟类的行为。一个函数可以看作是一个类的定义,通过`new`关键字来...
Java 方法继承、方法重载、方法覆盖、小结 Java 编程语言中,方法继承、方法重载、方法覆盖是三个重要的概念,它们在软件开发中发挥着重要作用。 方法继承 方法继承是 Java 编程语言的一种机制,允许一个类继承另...
在JavaScript中,继承是一种核心机制,它允许创建新的...它处理了函数重载、特殊方法的保护以及对象属性的复制,使得开发者能够轻松地构建类的继承结构。理解这个源码对于深入学习JavaScript的面向对象编程非常有帮助。
但是我前些日子也改过些许客户端的小bug,确实那代码看得让人有些云里雾里,不知身在哪山,轻易不敢动代码,于是就自己动手鼓捣起我曾又爱又恨的javascript来,自己写一个简单的js实现namespace,继承,重载等面向...
JavaScript 图片大小重载插件,通常用于优化网页性能,特别是在响应式设计中,能够根据设备屏幕尺寸自动调整图片大小,提高页面加载速度并节省用户流量。jQuery Resize Plugin 是一个由 Adeel Ejaz 创建的优秀插件,...
与传统的面向对象语言如Java或C#不同,JavaScript的继承模型基于原型,这使得它的继承机制既灵活又强大。本文将详细介绍JavaScript中的类继承概念,包括基本原理、实现方式以及一些高级用法。 #### 二、继承概述 ...
3. 签名匹配算法:函数调用时,需要将调用参数与签名进行匹配,以找到合适的重载。匹配算法需要考虑参数个数、参数类型和最佳匹配规则。通常,算法先通过参数数量排除掉不匹配的重载,然后通过类型兼容性进一步排除...
总结来说,`lang.js`是JavaScript开发者的一个强大工具,它通过提供面向对象的扩展,使得开发者可以在JavaScript中更加方便地实现类的定义和函数重载,提升代码的可维护性和可读性。通过阅读源码和示例,开发者可以...
重载是面向对象语言里很重要的一个特性,JS中没有真正的重载,是模拟出来的(因为js是基于对象的编程语言,不是纯面向对象的,它没有真正的多态:如继承、重载、重写) 一、什么时候用重载? 举例: function ...
JavaScript中的运算符重载是一种模拟C++或C#等语言中运算符重载的方法,由于JavaScript本身不支持运算符重载,因此需要通过特定的技巧来实现。在本例中,作者采用了一种称为“代码解释”的技术,即通过编写一个函数...
在JavaScript中,面向对象编程(OOP)的三大特性为封装、继承和多态。以下是对这些特性的详细介绍,以及在JavaScript中如何实现和原理的探讨。 封装是面向对象编程的基石之一。它通过类(class)的概念将数据(属性...
上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现与网页的交互。本文将深入探讨WebView的重载使用及如何自定义网址,以帮助开发者更好地理解和应用这一功能。 首先,我们...
重写是类与类之间的关系,两者必须是继承关系。 2. 关键字 `super`:在 Java 类中使用 `super` 来引用父类的成分。`super` 可用于访问父类中定义的属性、调用父类中定义的成员方法、在子类构造方法中调用父类的构造...
与其他面向对象语言不同,JS的继承机制是基于原型(prototype)的,这使得其继承方式更为灵活,但同时也更加复杂。本文将深入探讨JavaScript中的类继承,以及如何通过不同的方法来实现它。 首先,我们需要了解...
Unity3D中JavaScript与C#对比 Unity3D 中 JavaScript 与 C#对比是游戏开发和互动项目制作中一个常见的问题。许多开发者特别是新手都会纠结于到底该用哪种语言比较好。以下是老外对 Unity3D 中这两种语言进行的一个...
继承是 Java 中的一种机制,允许子类继承父类的属性和方法,並且可以对父类的方法进行重写或重载。动态绑定是指在运行时确定方法的调用,而不是在编译时。多态性是通过继承和方法重写来实现的。 一、继承 继承是 ...
2. **继承**:继承是一种通过扩展已存在的类来创建新类的方式。子类可以继承父类的属性和方法,并且可以添加新的属性和方法或者覆盖父类中的方法,从而实现代码复用和功能的增强。 3. **多态**:多态是指允许不同类...