JS 建立自定義物件的方法

2021-10-05 08:07:15 字數 1780 閱讀 5721

優點:接受引數,可以無數次的呼叫這個函式,建立person物件,而每次他都可以返回乙個包含三個屬性乙個方法的物件。

缺點:雖然解決了建立多個相似物件的問題,但是沒有解決物件識別的問題(即怎麼知道乙個物件的型別)。

js中可以建立自定義的建構函式,從而定義自定義物件屬性和方法。

♦ person()中的**和createperson()的不同之處:

1、沒有顯式地建立物件

2、直接將屬性和方法賦給了this物件

3、沒有return語句

♦ 要建立person物件的新例項,必須使用new操作符。以這種方式呼叫建構函式世紀上會經歷一下四個步驟:

1、建立乙個新物件。

2、將建構函式的作用域賦給新物件(因此this就指向這個新物件)

3、執行建構函式中的**(為這個新物件新增屬性)

4、返回新物件

優點:建立自定義的建構函式意味著將來可以將它的例項標識為一種特定的型別。

缺點:每個方法都要在每個例項上重新創新一遍。person1,person2都有乙個名為sayname()的方法,但這兩個方法不是同乙個function的例項。因為ecmascript中的函式是物件,所以每定義乙個函式都是例項化了乙個物件。

♦理解原型物件

1、我們建立的每個函式都有乙個prototype(原型)屬性,這個屬性是乙個指標,指向函式的原型物件。

2、預設情況下,所有原型物件都自動獲得乙個constructor屬性,這個屬性是乙個指向prototype屬性所在函式的指標。

3、當呼叫建構函式建立乙個新例項後,該例項的內部將包含乙個指標(內部屬性)[[prototype]],指向建構函式的原型物件。

注意:1、person 的每個例項都包含乙個內部屬性,該屬性僅僅指向了person。prototype;換句話說,他麼與建構函式之間沒有直接的關係。

2、雖然這兩個例項都不包含屬性和方法,但我們卻可以呼叫person1.sayname()。這是通過查詢物件屬性的過程來實現的。

優點:減少了**的重複,也可用標識來建立物件。

缺點:1、它省略了為建構函式傳遞初始化引數這一環節,結果所有勢力在預設情況下都將取得相同的屬性值。

2、原型中所有屬性是被很多勢力共享的,這種共享對函式來說非常適合,對於那些包含基本值的屬性也還說得過去,但是對於包含引用型別值的屬性來說,就是乙個問題了,因為例項一般都有屬於自己的全部屬性。

建構函式模式用於定義例項屬性,而原型模式用於定義方法和共享的屬性。這樣,每個例項都有自己的乙份實力屬性的副本,但同時又共享著對方法的引用,最大限度的節省了記憶體。而且還支援向建構函式傳遞引數。這種方式也是ecmascript種使用最廣泛,認同度最高的一種建立自定義型別的方法。

另外還有動態原型、寄生建構函式模式、穩妥建構函式模式等方式。

js自定義物件及其方法

js中定義類的方式有很多種 1 工廠方式 function car return ocar var car1 car var car2 car 呼叫此函式時將建立新物件,並賦予它所有的屬性和方法。使用此函式可以建立2個屬性完全相同的物件。當然我妹可以通過給它傳遞引數來改版這種方式。function ...

js自定義物件和方法

js中定義類的方式有很多種 1 工廠方式 function car return ocar var car1 car var car2 car 呼叫此函式時將建立新物件,並賦予它所有的屬性和方法。使用此函式可以建立2個屬性完全相同的物件。當然我妹可以通過給它傳遞引數來改版這種方式。function ...

JS自定義物件

語法 obj name,age 表示物件obj的屬性名,冒號後面的為屬性值,像這種形式叫鍵值對 skill 是obj物件的方法1.字面量 2.工廠模式 3.建構函式模式 4.原型模式 5.混合模式 原型模式和建構函式模式的混合 var obj console.log obj name 什麼顏色 ob...