JS中的phototype

上传人:宝路 文档编号:7212096 上传时间:2017-09-18 格式:DOC 页数:6 大小:56.50KB
返回 下载 相关 举报
JS中的phototype_第1页
第1页 / 共6页
JS中的phototype_第2页
第2页 / 共6页
JS中的phototype_第3页
第3页 / 共6页
JS中的phototype_第4页
第4页 / 共6页
JS中的phototype_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《JS中的phototype》由会员分享,可在线阅读,更多相关《JS中的phototype(6页珍藏版)》请在金锄头文库上搜索。

1、JS 中的 phototype 是 JS 中比较难理解的一个部分本文基于下面几个知识点:1 原型法设计模式在.Net 中可以使用 clone()来实现原型法原型法的主要思想是,现在有1个类 A,我想要创建一个类 B,这个类是以 A 为原型的,并且能进行扩展。我们称 B 的原型为 A。2 javascript 的方法可以分为三类:a 类方法b 对象方法c 原型方法 例子:function People(name)this.name=name;/对象方法this.Introduce=function()alert(My name is +this.name);/类方法People.Run=func

2、tion()alert(I can run);/原型方法People.prototype.IntroduceChinese=function()alert(我的名字是+this .name);/测试var p1=new People(Windking);p1.Introduce();People.Run();p1.IntroduceChinese(); 3 obj1.func.call(obj)方法意思是将 obj 看成 obj1,调用 func 方法好了,下面一个一个问题解决:prototype 是什么含义?javascript 中的每个对象都有 prototype 属性,Javascrip

3、t 中对象的 prototype 属性的解释是:返回对象类型原型的引用。A.prototype = new B();理解 prototype 不应把它和继承混淆。A 的 prototype 为 B 的一个实例,可以理解 A 将 B中的方法和属性全部克隆了一遍。A 能使用 B 的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A 的 prototype 是 B 的实例,同时 B 的 prototype 也是 A 的实例。 先看一个实验的例子:function baseClass()this.showMsg = function()alert(baseClass:showMsg); fu

4、nction extendClass()extendClass.prototype = new baseClass();instance = new extendClass();instance.showMsg(); / 显示 baseClass:showMsg我们首先定义了 baseClass 类,然后我们要定义 extentClass,但是我们打算以 baseClass的一个实例为原型,来克隆的 extendClass 也同时包含 showMsg 这个对象方法。extendClass.prototype = new baseClass()就可以阅读为:extendClass 是以 base

5、Class 的一个实例为原型克隆创建的。那么就会有一个问题,如果 extendClass 中本身包含有一个与 baseClass的方法同名的方法会怎么样?下面是扩展实验2:function baseClass()this.showMsg = function()alert(baseClass:showMsg); function extendClass()this.showMsg =function ()alert(extendClass:showMsg);extendClass.prototype = new baseClass();instance = new extendClass();

6、instance.showMsg();/显示 extendClass:showMsg实验证明:函数运行时会先去本体的函数中去找,如果找到则运行,找不到则去 prototype中寻找函数。或者可以理解为 prototype 不会克隆同名函数。那么又会有一个新的问题:如果我想使用 extendClass 的一个实例 instance 调用 baseClass 的对象方法 showMsg 怎么办?答案是可以使用 call: extendClass.prototype = new baseClass();instance = new extendClass();var baseinstance = n

7、ew baseClass();baseinstance.showMsg.call(instance);/显示 baseClass:showMsg这里的 baseinstance.showMsg.call(instance);阅读为“将 instance 当做 baseinstance 来调用,调用它的对象方法 showMsg”好了,这里可能有人会问,为什么不用 baseClass.showMsg.call(instance);这就是对象方法和类方法的区别,我们想调用的是 baseClass 的对象方法最后,下面这个代码如果理解清晰,那么这篇文章说的就已经理解了:function baseCla

8、ss()this.showMsg = function()alert(baseClass:showMsg); this.baseShowMsg = function()alert(baseClass:baseShowMsg);baseClass.showMsg = function()alert(baseClass:showMsg static);function extendClass()this.showMsg =function ()alert(extendClass:showMsg);extendClass.showMsg = function()alert(extendClass:s

9、howMsg static)extendClass.prototype = new baseClass();instance = new extendClass();instance.showMsg(); /显示 extendClass:showMsginstance.baseShowMsg(); /显示 baseClass:baseShowMsginstance.showMsg(); /显示 extendClass:showMsgbaseClass.showMsg.call(instance);/显示 baseClass:showMsg staticvar baseinstance = new baseClass();baseinstance.showMsg.call(instance);/显示 baseClass:showMsg作者:轩脉刃(yjf512)出处:(http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号