prototype (一)

JavaScript中的prototype
1、原型法设计模式
原型法主要思想是,现在有1个类A,我想要创建1个类B,这个类是以A为原型的,并且能够进行扩展。我们称B的原型为A。
2、JavaScript的方法可以分为三类:
类对象 对象方法 原型方法

function People(name){
     this.name=name; //对象方法
     this.Introduce=function(){
          alert("My name is"+this.name );
     }
}
//类方法
People.Run =function(){
     alert("i can run");
}
//原型方法
People.prototype.IntroduceChinese = function(){
     alert("我的名字是"+this.name);
}
//测试
var p1 =new People("Windking");
p1.Introduce();
P1.Introduce();

3、obj1.func.call(obj) 方法
意思是将obj看成obj1,调用func方法。
4、prototype含义
JavaScript中每个对象都有prototype属性,JavaScript中对象的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");
     }
}
function extendClass(){
}
extendClass.prototype = new baseClass();
var instance = new extendClass();
instance.showMsg();
//显示baseClass::showMsg

我们首先定义了baseClass类,然后我们要定义extendClass,但我们打算以baseClass的一个实例为原型,来克隆extendClass也同时包含showMsg这个对象方法。
如果extendClass中本身包含一个与baseClass的方法同名方法会怎么样。
function baseClass(){
this.showMsg = function()
{
alert("baseClass::showMsg");
}
}function extendClass(){
this.showMsg =function ()
{
alert("extendClass::showMsg");
}
}extendClass.prototype = new baseClass();
var instance = new extendClass();instance.showMsg();//显示extendClass::showMsg

实验证明:函数运行时先去本体函数中去找,如果找到则运行,找不到择取prototype中寻找函数。或者理解为prototype不会克隆同名函数。
如果我想使用extendClass的一个实例instance调用baseClass的对象方法showMsg怎么办?答案是可以使用call: 

extendClass.prototype = new baseClass();
var instance = new extendClass();var baseinstance = new baseClass();
baseinstance.showMsg.call(instance);//显示baseClass::showMsg

这里的baseinstance.showMsg.call(instance);阅读为“将instance当做baseinstance来调用,调用它的对象方法showMsg”好了,这里可能有人会问,为什么不用baseClass.showMsg.call(instance);这就是对象方法和类方法的区别,我们想调用的是baseClass的对象方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,827评论 2 17
  • 来自:原文 javascript的方法可以分为三类类方法对象方法原型方法 function People(name...
    wyude阅读 187评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 每回有朋友问我,你去过最美的地方是哪里? 我都会认真的毫不犹豫的说“徒步太白山,一路的美景是我此生见过的最美的画。...
    张玉晶阅读 757评论 2 1
  • 你可能已经觉得我很烦了为什么不能饶了你对吗。我也挺讨厌自己这样没完没了的,但是我不知道为什么不爱说话的我突然变成话...
    缺胳膊少腿瞪小眼阅读 605评论 0 0