摘要:在中,寫成類的本質基本都是構造函數原型。操作符左邊是待檢測類的對象,右邊是定義類的構造函數。不宜用在這里,我們需要知道的幾種定義類的方法,除了上面的構造函數外,還有方法用這個方法,類就是一個對象,而不是函數。
js類的基本含義
我們知道,在js中,是沒有類的概念的。類的所有實例對象都從同一個原型對象上繼承屬性,因此,原型對象是類的核心。
類是對象的抽象,而對象是類的具體實例。類是抽象的,不占用內存,而對象是具體的,占用存儲空間?!俣劝倏?/p>
早期的javascript需求都很簡單,基本都是寫成函數的,然后是面向過程的寫法,后來慢慢的引入面向對象開發思想,再后來就慢慢寫成 類。
在js中,寫成類的本質基本都是 構造函數+原型。下面,就討論一下js類的幾種寫法:
構造函數 法/** * Person類:定義一個人,有name屬性和getName方法 */
由上面控制臺輸出結果可知,p1和p2的確是類Person的實例對象。instanceof操作符左邊是待檢測類的對象,右邊是定義類的構造函數。這里,instanceof用來檢測對象p1是否屬于Person類。
這種方式的優點是:我們可以根據參數來構造不同的對象實例 ,缺點是每次構造實例對象時都會生成getName方法,造成了內存的浪費 。
我們可以用一個外部函數來代替類方法,達到了每個對象共享同一個方法。改寫后的類如下:
//外部函數原型方式
原型方式的缺點就是不能通過參數來構造對象實例 (一般每個對象的屬性是不相同的) ,優點是所有對象實例都共享getName方法(相對于構造函數方式),沒有造成內存浪費 。
構造函數+原型方式取前面兩種的優點:
a、用構造函數來定義類屬性(字段)。
b、用原型方式來定義類的方法。
這樣,我們就既可以構造不同屬性的對象,也可以讓對象實例共享方法,不會造成內存的浪費。
為了讓js代碼風格更緊湊,我們讓prototype方法代碼移到function Person的大括號內。
在這里,我們需要知道的幾種定義類的方法,除了上面的構造函數外,還有:
Object.create()方法用這個方法,"類"就是一個對象,而不是函數。
var Person = { name : "trigkit4", age : 21, run: function(){ alert("I like running"); } }
然后,直接用Object.create()生成實例,不需要用到new。
var p1 = Object.create(Person); alert(p1.age);//21 p1.run();//I like running
這種方法比"構造函數法"簡單,但是不能實現私有屬性和私有方法,實例對象之間也不能共享數據,對"類"的模擬不夠全面。
createNew()方法這種方法不需要用到this和prototype,其做法是用對象來模擬一個類,然后在類里面定義一個構造函數createNew(),然后在createNew()里面定義實例對象,把這個實例對象作為返回值。
使用的時候,調用createNew()方法,就可以得到實例對象。
var p1 = Person.createNew(); p1.run();//I like running
這種寫法其實和對象字面量的寫法是很類似的,只不過一個是逗號分隔,一個是分號分隔。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85332.html
摘要:記錄的學習筆記,在回答別人的問題時發現自己的的理解誤差很大的在沒有帶來的的時候,我們編寫的時候很多時候會通過構造函數和原型鏈來添加方法屬性,實現的功能。而是看成是構造函數的寫法。等同于類的實例對象就像使用構造函數一樣使用命令來創建一個實例。 記錄class的學習筆記,在回答別人的問題時發現自己的的理解誤差很大 javascript的class 在沒有es6帶來的class的時候,我們編...
摘要:四混合方式對象冒充的主要問題是必須使用構造函數方式,這不是最好的選擇。在中創建類的最好方式是用構造函數定義屬性,用原型定義方法。注意,雖然代表了父類的構造函數,但是返回的是子類的實例,即內部的指的是,因此在這里相當于。 一、對象冒充 其原理如下:構造函數使用 this 關鍵字給所有屬性和方法賦值(即采用類聲明的構造函數方式)。因為構造函數只是一個函數,所以可使 Parent 構造函數 ...
摘要:規定,每個函數都有一個屬性,指向一個對象大毛二毛構造函數的屬性,就是實例對象和的原型對象。這就是所有對象都有和方法的原因,因為這是從繼承的構造函數的屬性指向一個數組,就意味著實例對象可以調用數組方法。 目錄 [隱藏] 原型對象概述構造函數的缺點prototype 屬性的作用原型鏈constructor 屬性instanceof 運算符構造函數的繼承多重繼承模塊基本的實現方法封裝私有變量...
摘要:新建一個類該函數返回一個類的實例給函數傳入通過立即調用類構造函數可以創建單例。派生類是指繼承自其它類的新類。在構造函數中訪問之前要調用,負責初始化。在構造函數中使用通常表示當前的構造函數名。 ES5中的近類結構 ES5以及之前的版本,沒有類的概念,但是聰明的JavaScript開發者,為了實現面向對象,創建了特殊的近類結構。 ES5中創建類的方法:新建一個構造函數,定義一個方法并且賦值...
閱讀 2536·2023-04-25 19:47
閱讀 3383·2019-08-29 17:18
閱讀 856·2019-08-29 15:26
閱讀 3360·2019-08-29 14:17
閱讀 1116·2019-08-26 13:49
閱讀 3339·2019-08-26 13:22
閱讀 3023·2019-08-26 10:44
閱讀 2693·2019-08-23 16:51