您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關javascript如何定義類,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
JavaScript定義類的三個方法:1、利用構造函數定義類,語法為“function name(){this.name=value;}”;2、利用“Object.create()”方法定義類;3、利用“createNew()”方法定義類。
本教程操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。
在面向對象編程中,類(class)是對象(object)的模板,定義了同一組對象(又稱"實例")共有的屬性和方法。
JavaScript語言不支持"類",但是可以用一些變通的方法,模擬出"類"。
一、構造函數法
這是經典方法,也是教科書必教方法。它用構造函數模擬"類",在其內部用this關鍵字指代實例對象。
function Cat(){ this.name = "大毛"; }
生成實例的時候,使用new關鍵字。
var cat1 = new Cat(); alert(cat1.name); //大毛
類的屬性和方法,還可以定義在構造函數的prototype對象之上。
Cat.prototype.makeSound = function(){ alert("喵喵喵"); }
關于這種方法的詳細介紹,請看系列文章《JavaScript面向對象編程》,這里就不多說了。它的主要缺點是,必教復雜,用到this和prototype,編寫和閱讀都很費力。
二、Object.create()法
為了解決"構造函數法"的缺點,更方便地生成對象,JavaScript的國際標準ECMAScript第五版(目前通行的是第三版),提出了一個新的方法Object.create()。
用這個方法,"類"就是一個對象,不是函數。
var Cat = { name: "大毛", makeSound: function(){ alert("喵喵喵"); } };
然后,直接用Object.create()生成實例,不需要用到new。
var cat1 = Object.create(Cat); alert(cat1.name); //大毛 cat1.makeSound(); //喵喵喵
目前,各大瀏覽器的最新版本(包括IE9)都部署了這個方法。如果遇到老式瀏覽器,可以用下面的代碼自行部署。
if(!Object.create){ Object.create = function(o){ function F(){}; F.prototype = o; return new F(); } }
這種方法比"構造函數法"簡單,但是不能實現私有屬性和私有方法,實例對象之間也不能共享數據,對"類"的模擬不夠全面。
三、極簡主義法
荷蘭程序員Gabor de Mooij 提出了一種比Object.create()更好的新方法,它稱這種方法為"極簡主義法"(minimalist approach)。這也是我推薦的方法。
3.1 封裝
這種方法不適用this和prototype,代碼部署起來非常簡單,這大概也是它被叫做"極簡主義法"的原因。
首先,它也是用一個對象模擬"類"。在這個類里面,定義一個構造函數caeateNew(),用來生成實例。
var Cat = { createNew: function(){ //some code here } };
然后,在carateNew()里面,定義一個實例對象,把這個實例對象作為返回值。
var Cat = { createNew: function(){ var cat = {}; cat.name = "大毛"; car.makeSound = function(){ alert("喵喵喵"); }; } };
使用的時候,調用createNew()方法,就可以得到實例對象。
var cat1 = Cat.createNew(); cat1.makeSound(); //喵喵喵
這種方法的好處是,容易理解,結構清晰優雅,符合傳統的"面向對象編程"的構造,因此可以方便地部署下面的特性。
關于“javascript如何定義類”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。