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,842評論 2 17
  • 來自:原文 javascript的方法可以分為三類類方法對象方法原型方法 function People(name...
    wyude閱讀 187評論 0 0
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 每回有朋友問我,你去過最美的地方是哪里? 我都會認真的毫不猶豫的說“徒步太白山,一路的美景是我此生見過的最美的畫。...
    張玉晶閱讀 763評論 2 1
  • 你可能已經覺得我很煩了為什么不能饒了你對嗎。我也挺討厭自己這樣沒完沒了的,但是我不知道為什么不愛說話的我突然變成話...
    缺胳膊少腿瞪小眼閱讀 605評論 0 0