摘要:舉個例子,現在有一個叫做的構造函數,表示貓對象的原型。不受的影響但是通過上面的例子你會發現用構造函數生成實例對象,它有一個缺點,那就是無法共享屬性和方法。
在Javascript語言中,new命令后面跟的不是類,而是構造函數。
舉個例子,現在有一個叫做CAT的構造函數,表示貓對象的原型。
function CAT(name){ this.name = name; this.age = 3; }
當我們new這個構造函數的時候,就會生成一個貓對象的實例。
var Tom = new CAT("Tom"); var Jack = new CAT("Jack"); Tom.age = 5; alert(Tom.name+","+Tom.age); //Tom,5 alert(Jack.name+","+Jack.age); //Jack,3 不受Tom的影響
但是通過上面的例子你會發現:用構造函數生成實例對象,它有一個缺點,那就是無法共享屬性和方法。
因為這兩個對象的age屬性是獨立的,修改其中一個,不會影響到另一個。
這樣做的壞處就是會造成資源浪費,那么我們要如何來解決這件事呢,那就需要prototype出場了。
這個屬性包含一個對象(以下簡稱"prototype對象"),所有實例對象需要共享的屬性和方法,都放在這個對象里面;那些不需要共享的屬性和方法,就放在構造函數里面。
CAT的代碼利用prototype就可以改寫成這樣子了: function CAT(name){ this.name = name; } CAT.prototype.age = 3; var Tom = new CAT("Tom"); var Jack = new CAT("Jack"); CAT.prototype.age = 5; alert(Tom.name+","+Tom.age); //Tom,5 alert(Jack.name+","+Jack.age); //Jack,5
age屬性放在prototype對象里,是兩個實例對象共享的。只要修改了prototype對象,就會同時影響到兩個實例對象。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78324.html
摘要:代碼傳送門如上代碼示例,從其運行結果可知,是等于的原型的,是被對象后返回的函數,從驗證結果來看,函數經過的一層包裝,依然不會影響其原型檢測的綁定。前言 在面向對象語言中,一般都有關鍵字 instanceof 來檢測對象類型,更準確點來說是檢測對象是哪個類型的實例。那么在 JS 中這個關鍵字又有什么不同之處呢?此文僅是一篇對 ES 標準中 instanceof 關鍵字的解讀,并記錄了在此過程中...
閱讀 2825·2023-04-25 20:06
閱讀 1446·2021-08-26 14:15
閱讀 2234·2021-08-12 13:27
閱讀 1772·2019-08-30 15:55
閱讀 3469·2019-08-30 13:20
閱讀 2825·2019-08-29 15:12
閱讀 3330·2019-08-29 15:06
閱讀 2858·2019-08-29 14:13