javascript高级特性之"继承"

javaScript中并不存在继承的感念..但是我们可以根据javaScript的原型进行模拟JavaScript的"继承":

1.写两个函数对象,将其中的一个函数赋值给另一个函数对象的原型:

 <script type="text/javascript">
  	function A(){
		this.a = "a";
		this.sayA = function(){
			alert("this is a.");
		}
	}
	var a = new A();

	function B(){
		this.b = "b";
		this.sayB = function(){
			alert("this is b.");
		}
	}

	B.prototype = a;

	//测试:函数对象B就"继承"了函数对象A
	var b = new B();

	alert(b.b);
	b.sayB();

	alert(b.a);
	b.sayA();

  </script>

运行结果:

2.只继承于原型(定义A的函数对象,定义A函数对象的原型.定义B函数对象,把A对象的函数原型赋值给B的原型)

function A(){}

	A.prototype = {
		a : "a",
		sayA : function(){
			alert("this is a.")
		}
	}

	function B(){
		this.b = "b";
		this.sayB = function(){
			alert("this is b.");
		}
	}

	B.prototype = A.prototype;

	var b = new B();

	alert(b.b);
	b.sayB();

	alert(b.a);
	b.sayA();

3.实现多继承

<script type="text/javascript">
  	function A(){}
	A.prototype = {
		a : "a",
		sayA : function(){
			alert("this is a.")
		}
	}
	function B(){}
B.prototype = A.prototype;
B.prototype.b = "b";
	B.prototype.sayB = function(){
		alert("this is b.")
	}

	var b = new B();
	alert(b.a);
	b.sayA();

	alert(b.b);
	b.sayB();

  </script>

* 分析得出这句话出问题了

* * 因为B.prototype多次调用

* * 出现的顺序有关系?谁先定义,谁被覆盖

* * 原型定义属性和方法的形式有关系?没有关系

* 条件:

* * 先实现函数对象B"继承"函数对象A的内容

* * 再利用原型为函数对象B增加属性和方法(分散形式)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-30 02:37:09

javascript高级特性之"继承"的相关文章

javascript高级特性

01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_对象_定义函数对象09_对象_内建对象10_原型_为函数对象增加属性或方法11_原型_利用函数对象本身重写原型12_继承_函数对象之间的继承13_继承_普通对象之间的继承 javascript高级特性(面向对象): * 面向对象:   * 面向对象和面向过程的区别:     * 面向对象:人就是对象,年龄\

JavaScript高级特性之原型

JavaScript的原型 原型prototype属性只适用于函数对象(这里的函数对象是自己为了理解更好定义的,普通对象是没有原型属性的) 1.研究函数原型: <script type="text/javascript"> //原型是函数对象的一个属性(普通对象是没有原型属性的.). function Person(){ this.name="李卫康"; this.sayHi=function(){ alert("Hi"); } };

JavaScript【5】高级特性(作用域、闭包、对象)

笔记来自<Node.js开发指南>BYVoid编著 1.作用域 if (true) { var somevar = 'value'; } console.log(somevar); JavaScript的作用域完全是由函数决定的,if.for语句中的花括号不是独立的作用域. 1.1.函数作用域 作用域是通过函数来定义的,在一个函数中定义的变量只对这个函数内部可见,我们称为函数作用域.在函数中引用一个变量时,JavaScript会先搜索当前函数作用域,或者称为"局部作用域",

Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript时,可以选择面向过程的方式编程,显得高效:但在实际工作中,遇到的项目需求和框架较大的情况下,选择面向对象的方式编程显得尤其重要,Javascript原生语法中没有提供表述面向对象语言特性的关键字和语法(如extends.implement).为了实现这些面向对象的特性,需要额外编写一些代码,如下.

JavaScript高级程序设计(第三版)学习,第一次总结

Array类型 var arr = []; arr.length; //返回数组元素个数 改变length可以动态改变数组大小 检测数组 instanceof可以检测某个对象是否是数组,限制:只能是一个网页或一个全局作用域 Array.isArray(arr); //最终确定某个值到底是不是数组,没有限制 转换方法 arr.toString(); //返回由数组每个值的字符串形式拼接而成的以逗号分隔的字符串 arr.valueOf(); //与toString方法一致 arr.toLocalSt

JavaScript高级程序设计24.pdf

Element类型 Element类型用于表现XML或HTML元素,提供对元素标签名.子节点及特性的访问,它具有以下特征 nodeType的值为1: nodeName的值为元素的标签名: nodeValue的值为null: parentNode可能是Document或Element: 要访问元素的标签名可以使用nodeName属性或者tagName属性,两者返回相同的值 <div id="myDiv"></div> var div=document.getEle

JavaScript高级---装饰者模式设计

一.设计模式 javascript里面给我们提供了很多种设计模式: 工厂.桥.组合.门面.适配器.装饰者.享元.代理.观察者.命令.责任链 在前面我们实现了工厂模式和桥模式 工厂模式 : 核心:为了生产对象,实现解耦. 桥接模式 : (桥接模式是一种既能把两个对象连接在一起,又能避免二者间的强耦合的方法.通过“桥”把彼此联系起来,同时又允许他们各自独立变化) 主要作用:主要作用表现为将抽象与其实现隔离开来,以便二者独立化. 组合模式 : (组合模式是一种专门为创建Web上的动态用户界面而量身制定

JavaScript高级程序设计25.pdf

Text类型 文本类型由Text类型表示,包含纯文本内容,可以包含转义后的HTML字符,但不能包含HTML代码.Text节点具有以下特征: nodeType的值为3: nodeName的值为"#text": nodeValue的值为节点所包含的文本: parentNode是一个Element: 不支持(没有)子节点 可以通过nodeValue属性或data属性访问Text节点中包含的文本,这两个属性中包含的值相同,对nodeValue的修改也会通过data反映出来.可以使用下列方法操作

JS高级特性

一.JavaScript的同源策略 参考链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Same_origin_policy_for_JavaScript 同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin). 下表给出了相对http://store.c