您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關實現JavaScript編寫類的方式有哪些,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
網上實現javascript寫類的方法有很多, 總結下不外乎以下幾種. 我自己學習總結了一下.
構造方法方式;原型方式;構造方法+原型的混合方式
現在具體分析一下以上方式的優缺點:
構造方法方式
這是最基本的也是最像Java寫class的方式. 上代碼:
//創建一個Student類 function Student(name){ this.name = name; this.sayName = function(){ alert(this.name); }; } //new兩個不同的Student. var jimmy = new Student('jimmy'); var henry = new Student('henry'); jimmy.sayName();//顯示jimmy henry.sayName();//顯示henry
這樣的方法簡單明了, 也符合JAVAer的胃口, 但是每new一個新對象, 就會在內存中分配一個sayName方法, 性能不是很好.
原型方式
//創建一個Student類 //屬性和方法都通過Student.prototype設置 function Student(name){ Student.prototype = name; Student.prototype.sayName = function(){ alert(this.name); } } //new兩個不同的Student. var jimmy = new Student('jimmy'); var henry = new Student('henry'); jimmy.sayName();//顯示henry!!! henry.sayName();//顯示henry!!!
也許執行的代碼和有些童鞋的期望有出入. 兩次alert都彈出henry! 其實很好理解. 屬性和方法都通過prototype設置. 不同對象的同一個屬性或者方法都指向同一個內存, 所以henry是在jimmy后設置的. 所以henry把jimmy覆蓋了.
混合方式
構造方法的方式可以為同一個類的每一個對象分配不同的內存, 這很適合寫類的時候設置屬性, 但是設置方法的時候我們就需要讓同一個類的不同對象共享同一個內存了. 寫方法用原型的方式***. 所以寫類的時候需要把構造方法和原型兩種方式混合著用. 廢話少說, 看代碼:
//創建一個Student類 //屬性通過構造方法設置 //方法通過Student.prototype設置 function Student(name){ this.name = name; Student.prototype.sayName = function(){ alert(this.name); } } //new兩個不同的Student. var jimmy = new Student('jimmy'); var henry = new Student('henry'); jimmy.sayName();//顯示jimmy henry.sayName();//顯示henry
so far so good. 同一類的不同對象, 屬性各自占有內存, 方法共享同一內存. 其實這里還是有一個小問題:
每new一個新對象, 就會執行一次
Student.prototype.sayName = function(){ alert(this.name); }
造成不必要的重復運算. 可以在類里面設置一個標記位, 第一次執行的時候給這個標志位設置true, 如果為true就不再為prototype設置方法。
關于實現JavaScript編寫類的方式有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。