建立物件的幾種方法

2022-07-12 03:30:11 字數 3808 閱讀 2087

建立自定義物件的最簡單方法就是建立乙個object的例項,再為他新增屬性和方法。

1

var people = new

object();

2 people.name = "

yewenxiang";

3 people.age = 24

;4 people.sayname =function()

還可以使用物件字面量語法建立乙個物件,等價於上面的**

這個方法是new object() 來建立乙個people物件的例項,有乙個很大的問題:

為了解決上面問題發明了用函式來建立乙個物件的方法:

1

function

people(name,age)

8returno;9

}10var people1 = people("yewenxiang",24);

11console.log(people1.name);

12 people1.sayname();

函式people()能接收兩個引數,可以無限次的呼叫這個函式,每次都會返回乙個物件,物件的基本屬性為傳入函式的引數,解決了建立多個相似物件導致**臃腫的問題。但是不能識別建立的物件型別,建立的物件的建構函式全部是object。

建構函式模式可以用來建立自定義型別的物件,原生的建構函式型別有object array string等等。

1

function

people(name,age)7}

8var people1 = new people("yewenxiang",24);

9var people2 = new people("xiangwang",23);

10console.log(people1.name);

11 console.log(people1 instanceof people); //

true

12 console.log(people1 instanceof object); //

true

這個例子中建立的物件例項既是object物件的例項,也是自定義建構函式people 的例項。

建構函式缺點:

上面的建構函式可以這麼定義

1

function

people(name,age)

7 }

看第四行**。每次例項化乙個物件,sayname屬性都指向了乙個不同的函式引用,也就是指向了由function建構函式建立的不同例項。

1

function

people(name,age)7}

8var people1 = new people("yewenxiang",24);

9var people2 = new people("yewenxiang",23);

10 console.log(people1.sayname == people2.sayname); //

false

11 console.log(people1.sayname() == people2.sayname()); //

true

我們建立的每個函式都有乙個prototype屬性,這個屬性是乙個指標,指向了原型物件。這個原型物件的作用是由自定義的建構函式所有例項化的物件共享的屬性和方法.

1

function

people()

3 people.prototype.name = "yewenxiang";

4 people.prototype.age = "23";

5 people.prototype.sayname = function()8

var people1 = new

people();

9var people2 = new

people();

10 console.log(people1.sayname == people2.sayname); //

true

簡單的原型寫法:

用乙個包含所有屬性和方法的物件字面量來重寫整個原型。

1

function

people()

3 people.prototype =

9 };

但是有個問題,因為是用物件字面量來重寫了people.prototype物件,people.prototype.constructor 指向了object這個建構函式,不再指向people建構函式,如下圖虛線為變化前,實線為變化後。

輸出object建構函式

13 console.log(people1 instanceof people); //

true

14 console.log(people1 instanceof object); //

true

雖然可以使用instanceof 來檢測物件的型別,但是無法使用people1.constructor 來確定物件了,因為所有例項都會使用people.prototype原型上的constructor屬性,而這個屬性指向object建構函式。

instanceof  檢測的原理:

可以給people.prototype = 來解決這個問題,但是重設了constructor屬性的值,導致他變成了可列舉的狀態,原生的是不可列舉的,可以使用object.defineproperty來定義這個屬性

1

function

people()

3 people.prototype =9}

10 object.defineproperty(people.prototype,"constructor",);

14var people1 = new

people();

15console.log(people1.prototype);

16 console.log(people1.constructor); //

輸出people建構函式

17 console.log(people1 instanceof people); //

true

18 console.log(people1 instanceof object); //

true

原型模式的問題:

使用的技巧:

1

function

people(name,age)

5 people.prototype.sayname = function()8

var people1 = new people("yewenxiang",24);

建立mat物件的幾種方法

方法一 使用mat 建構函式,這種方法簡單明瞭,可以為影象開闢記憶體,指定初始值等 mat m 4,4,cv 8uc3,scalar 0,0,255 建立三個通道的影象,並為其定義尺寸 及通道的初始值 方法二 通過建構函式進行初始化 int sz 3 mat l 3,sz,cv 8uc1,scala...

Javascript建立物件的幾種方法

工廠模式 優點 接受引數,可以無數次的呼叫這個函式,建立person物件,而每次他都可以返回乙個包含三個屬性乙個方法的物件。缺點 雖然解決了建立多個相似物件的問題,但是沒有解決物件識別的問題 即怎麼知道乙個物件的型別 建構函式模式 js中可以建立自定義的建構函式,從而定義自定義物件屬性和方法。per...

Js建立物件的幾種方法

1.使用object建構函式建立物件 先建立空的object物件,在動態地新增屬性,方法,適用場景 剛開始不清楚物件內部資料。問題 語句多 var p newobject p p.name 丁七歲 2.適用物件字面量建立物件適用 建立物件,同時指定屬性,方法。適用場景 剛開始你清楚物件的內部資料。問...