1、对象冒充
//对象冒充对应构造函数方式
//对象冒充对应构造函数方式
function ClassA(sColor){
this.color=sColor;
this.showColor=function(){
alert(this.color);
};
}
function ClassB(sColor,sName){
this.newMethod=ClassA;
this.newMethod(sColor);
delete this.newMethod;
this.name=sName;
this.showName=function(){
alert(this.name);
};
}
var oa=new ClassA("RED");
var ob=new ClassB("blue","red");
oa.showColor();//RED
ob.showColor();//blue
ob.showName();//red
构造函数使用this关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使ClassA的构造函数成为ClassB的方法,然后调用它。ClassB就会收到ClassA的构造函数中定义的属性和方法。
2、call()方法是与经典的对象冒充方法最相似的方法。它的第一个参数用作this的对象。其他参数都都直接传递给函数自身。其实就相当于前一个是对象,后一个是普通的参数一样。
function showColor(sPrefix,sSuffix){
alert(sPrefix+this.color+sSuffix);
};
var obj=new Object();
obj.color="red";
//the color is red ,a very nice color indeed
showColor.call(obj,"the color is "," ,a very nice color indeed");
function ClassA(sColor){
this.color=sColor;
this.showColor=function(){
alert(this.color);
};
}
function ClassB(sColor,sName){
ClassA.call(this,sColor);
this.name=sName;
this.showName=function(){
alert(this.name);
};
}
var ob=new ClassB("red","ooo");
ob.showColor(); //red
ob.showName();//ooo
3、apply()方法有两个参数,用作this的对象和要传递给函数的参数的数组。
function showColor(sPrefix,sSuffix){
alert(sPrefix+this.color+sSuffix);
};
var obj=new Object();
obj.color="green";
//the color is green ,a very nice color indeed
showColor.apply(obj,new Array("the color is "," ,a very nice color indeed"));
function ClassA(sColor){
this.color=sColor;
this.showColor=function(){
alert(this.color);
};
}
function ClassB(sColor,sName){
ClassA.apply(this,arguments);
this.name=sName;
this.showName=function(){
alert(this.name);
};
}
var ob=new ClassB("red","ooo");
ob.showColor();//red
ob.showName();//ooo
4、原型链
原型链扩展了类的原型定义方式。prototype对象是个模板,要实例化的对象都以这个模板为基础。prototype对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制。原型链的弊端是不支持多重继承。记住,原型链会用另一种类型的对象重写类的prototype属性。因此子类的所有属性和方法必须出现在prototype属性被赋值以后。
//原型链方式对应原型方式
function ClassA(){
}
ClassA.prototype.color="red";
ClassA.prototype.showColor=function(){
alert(this.color);
};
function ClassB(){
}
ClassB.prototype=new ClassA();
ClassB.prototype.name="redred";
ClassB.prototype.showName=function(){
alert(this.name);
};
var objA=new ClassA();
var objB=new ClassB();
objA.color="blue";
objA.showColor();//blue
objB.color="green";
objB.name="dodo";
objB.showColor();//green
objB.showName();//dodo
alert(objB instanceof ClassA);//true
alert(objB instanceof ClassB);//true
5、混合方式
与定义类时同样的方式,即利用构造函数方式定义属性,用原型方式定义方法。而在继承机制中,可以用对象冒充继承构造函数的属性,用原型链继承prototype对象的方法。
function ClassA(sColor){
this.color=sColor;
}
ClassA.prototype.showColor=function(){
alert(this.color);
};
function ClassB(sColor,sName){
ClassA.call(this,sColor);
this.name=sName;
}
ClassB.prototype=new ClassA();
ClassB.prototype.showName=function(){
alert(this.name);
};
var objA=new ClassA("BLUE");
objA.showColor();//BLUE
var objB=new ClassB("red","baba");
objB.showColor();//red
objB.showName();//baba
分享到:
相关推荐
分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:①在两个基类中都包含一部分相同名字的数据成员name(姓名),age(年龄)和成员函数...
三种继承方式下基类成员对派生类的可见性探讨(公有继承、私有继承、受保护继承)
详细介绍c++类的继承方式,public、private、protect。
### C++三种继承方式详解 #### 一、引言 在C++中,类的继承是一种重要的机制,它允许我们创建新的类(派生类),这些新类继承自已存在的类(基类)。继承不仅提高了代码的复用性,还支持了面向对象编程的核心特性之...
在本项目中,“C#与halcon采用继承方式实现工具.zip”主要展示了如何在C#编程环境中利用面向对象的继承特性来与MVTec HALCON机器视觉库进行集成。C#是一种广泛应用于开发Windows应用程序、网络服务和游戏的.NET框架...
C++三种继承方式总结 C++语言中有三种继承方式:public继承、protected继承和private继承。这些继承方式主要是为了改变基类成员的访问属性,使得派生类可以访问基类的成员变量和成员函数。 首先,让我们了解一下类...
继承方式.cpp
我国继承法规定的继承方式有哪几种.doc
在探讨JavaScript编程中继承方式的比较分析之前,首先需要理解继承的概念及其在面向对象编程中的重要性。继承是面向对象编程中一项核心机制,允许创建一个新类(子类)继承现有类(父类)的属性和方法。在JavaScript...
本文将深入探讨JavaScript的五种对象定义方法以及五种继承方式。 1. **对象定义方法** - **字面量语法**:最直接的方法是使用花括号`{}`创建对象,如`var obj = {key1: value1, key2: value2};` - **构造函数**...
【温故而知新】JavaScript的继承方式有那些
Python 兵法编程 253_使用继承方式创建进程.mp4
Javascript中的几种继承方式对比分析_.docx
1.定义一个学生类Student,类中包含3个私有数据成员:name(姓名)、sex(性别)、score...用公有继承方式声明一个研究生类Graduate,该类中添加一个数据成员advisor(导师),并添加一个成员函数display来显示这些内容。
使用js实现继承的七种方式,详细讲解了js中的原型链继承,构造函数继承,组合继承(经典继承),原型式继承,寄生式继承,寄生组合式继承,以及ES6中的继承,描述原理以及实现和要点概述等。
JavaScript继承第1种方式:对象冒充;第2种方式:call方法;第3种方式:apply方法;第4种方式:原型链方式;第5种方式:混合方式(推荐)
本文将深入探讨Android style的继承方式,包括点(.)和`parent`属性的使用,以及相关的实例。 一、概述 Android style的继承机制允许我们创建一个基于现有style的新style,新style不仅包含自身定义的属性,还会...
温馨提示:想要更好的理解JS继承方式,须了解构造函数、原型对象、实例化对象、原型链等概念 第一种:原型链继承 利用原型链的特点进行继承 function Parent(){ this.name = 'web前端'; this.type = ['JS','...
在实际开发中,可以根据项目的具体需求选择合适的继承方式。例如,在需要简洁且快速的实现时,可以选择构造继承;而在需要严格遵循继承关系且对性能要求不高的情况下,原型链继承可能是个不错的选择。
计算机后端-Java-Java核心基础-第19章 IDEA的使用与多线程 15. 继承方式的课后练习.avi