javascript模拟实现继承,继承一次父类模板和原型对象

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP ‘oop7.jsp‘ starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<script type="text/javascript">
		//实现只继承父类的原型对象
		function extend(Sub,Sup){
			//1.用一个空函数进行中转
			//穿件一个空函数,目的:中转
			var F=new Function();
			F.prototype=Sup.prototype;      //实现空函数的原型对象和超类的原型对象转换
			Sub.prototype=new F();          //原型继承
			Sub.prototype.constructor=Sub;  //还原子类的构造器
			//保存父类的原型对象     1.方便解耦   2.可以方便获得分类的原型对象
			Sub.superClass=Sup.prototype;        //自定义一个子类的静态属性,接收父类的原型对象
			if(Sup.prototype.constructor==Object.prototype.constructor){
				Sup.prototype.constructor=Sup;   //手动还原父类原型对象的构造器
			}
		}

		//混合继承:原型继承+构造函数继承
		function Person(name,age){
			this.name=name;
			this.age=age;

		}

		Person.prototype={
			constructor:Person,
			sayName:function(){
				alert(this.name);
			}
		}

		function Boy(name,age,sex){
			Boy.superClass.constructor.call(this,name,age);          //绑定父类的模板函数,借用构造,支复制了父类的模板
			this.sex=sex;
		}

		//Boy.prototype=new Person();    //既继承了父类的模板,又继承了父类的原型,但由于不习惯于在new Person时传入参数,所以会再使用call函数继承模板
		extend(Boy,Person);
		//给子类加上一个父类的覆盖方法
		Boy.prototype.sayName=function(){
			alert(‘子类复写方法‘);
		}
		var b=new Boy(‘张三‘,23,‘男‘);
		alert(b.sex);
		b.sayName();
		Boy.superClass.sayName.call(b);     //调用父类的同名函数

		//3件事
		//混合继承缺点:继承了两次父类的模板,一次父类的原型对象

		//2集成一次父类的模板,一次父类的原型对象
		//只继承一遍父类的模板      自定义方法实现只继承一遍父类的模板extend方法

	</script>
  </head>
  
  <body>
    This is my JSP page. <br>
  </body>
</html>
时间: 2024-10-29 19:05:36

javascript模拟实现继承,继承一次父类模板和原型对象的相关文章

javascript 模拟java 实现继承的5种方式

1.继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = function(){ alert(this.username); } } function Child(username,password){ //通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承 //第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对象, //第二步:执行th

Javascript 面向对象一:封装数据个方法,从原型对象生成实例

一. 生成对象的原始模式 假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性. var Cat = { name : '', color : '' } 现在,我们需要根据这个原型对象的规格(schema),生成两个实例对象. var cat1 = {}; // 创建一个空对象 cat1.name = "大毛"; // 按照原型对象的属性赋值 cat1.color = "黄色"; var cat2 = {}; cat2.n

JavaScript模拟Java类继承

javascript采用原型继承的方式继承一个类(javascript没有类这个概念,暂时这么称呼吧),但一些使用过Java的程序员可能习惯使用经典的类继承,但javascript原生并不支持这种方式,因此需要手动实现.这里通过定义一个定义类(defineClass)的函数实现,经测试越用越顺手.由于javascript没有访问修饰符,因此如果需要使用到private成员,请使用闭包. 1 /* 简单的对象扩充方法 2 */ 3 merge:function (target, origin) {

父类引用指向子类对象

1 public class Test { 2 /** 3 * 对于多态,可以总结它为: 4 5 一.使用父类类型的引用指向子类的对象: 6 7 二.该引用只能调用父类中定义的方法和变量: 8 9 三.如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法:(动态连接.动态调用) 10 11 四.变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错. 12 13 多态的3个必要条件: 14 15 1.继承 2.重写

javascript面向对象系列第一篇——构造函数和原型对象

× 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是用new创建对象时调用的函数,与普通唯一的区别是构造函数名应该首字母大写 function Person(){ this.age = 30; } var person1 = new Person(); console.log(person1.ag

理解父类引用指向子类对象

java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解. 但当我这样定义时:   Animal a = new Cat(); 这代表什么意思呢? 很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象.由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向C

javascript面向对象——构造函数和原型对象

一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是用new创建对象时调用的函数,与普通唯一的区别是构造函数名应该首字母大写 function Person(){ this.age = 30; } var person1 = new Person(); console.log(person1.age);//30 根据需要,构造函数可以接受参数 function

java多态,如何理解父类引用指向子类对象

摘录 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解. 但当我这样定义时:   Animal a = new Cat(); 表示定义了一个Animal类型的引用,指向新建的Cat类型的对象.由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的. 那么这样做有什么意义呢?因为子类是对父类的一个改进

父类引用指向子类对象--面向对象的多态

先上代码 package com.fuzi.demo; public class FuZi { public static void main(String[] args) { FuLei fuLei = new ZiLei(); fuLei.print_info(); } } class FuLei { public void print_info() { System.out.println("父类的print_info"); System.out.println(this.get