JS物件和建構函式(可結合JS函式學習)

2021-09-27 16:42:06 字數 3950 閱讀 3069

什麼是物件

為什麼要用物件

//代表兩個屬性,較為繁瑣

var name=

'tom'

;var age=

12;

建立物件

obj[

"123"]=

789;

var n=

"123"

;//使用變數來引用更加靈活

console.

log(obj[n]

);

屬性值:

- js物件的資料型別可以是任意的,甚至可以是乙個物件

in運算子:

- 通過該運算子可以檢查乙個物件中是否含有指定的屬性

- 如果有返回true,沒有返回false

- 如果物件中沒有但是原型中有,也會返回true,此時使用物件的hasownproperty() 來檢查物件自身有是否含有該屬性,也是返回true/false,只有自身有該屬性才會返回true

- 語法:「屬性名」 in 物件

-console.log("test2" in obj);//true

- 語法:物件.hasownproperty(「屬性名」)

-obj.hasownproperty("test2");//true

var obj=

newobject()

;在物件中儲存的值稱為屬性

向物件中新增屬性

語法:物件.屬性名=屬性值;

*///向物件中新增乙個name屬性

obj.name=

"jack"

;//向物件中新增乙個gender屬性

obj.gender=

"男";

//向物件中新增乙個age屬性

obj.age=18;

/*修改屬性值

語法:物件.屬性名=屬性值;

*/obj.name=

"tom";/*

刪除屬性

語法:delete 物件.屬性名

*/delete obj.name;

var obj=

;obj.name=

"jack"

;var obj2=

};

function

createperson

(name,age,gender)

;//將新的物件返回

return obj;

}var obj2=

createperson

("a",18

,"男");

var obj3=

createperson

("b",28

,"男");

var obj4=

createperson

("c",38

,"男"

);

建立乙個建構函式,專門用來建立person物件的

建構函式就是乙個普通函式,建立方式he普通函式沒有區別

不同的是建構函式習慣上首字母大寫,呼叫方式也不同

普通函式直接呼叫,建構函式需要使用new關鍵字來呼叫

建構函式的執行流程:

立刻建立乙個新的物件

將新建的物件設定為函式中的this,在建構函式中可以使用this來引用新建的物件

逐行執行函式中的**

將新建的物件作為返回值返回

function

person

(name,age,gender);}

//新建的物件為per

var per=

newperson

("a",18

,"男");

var per2=

newperson

("b",28

,"男");

var per3=

newperson

("c",38

,"男");

console.

log(per)

;

使用同乙個建構函式建立的物件,我們稱為一類物件,也將乙個建構函式稱為乙個類

我們將通過乙個建構函式建立的物件,稱為該類的例項(per是person類的乙個例項)

使用instanceof可以檢查乙個物件是否是乙個類的例項

語法:物件instanceof 建構函式

如果是,則返回true,否則返回false

console.log(per instanceof person);//true

所有的物件都是object的後代

所以任何物件和object進行instanceof檢查時都會返回true

console.log(per instanceof object);//true

this的情況

當以函式的形式呼叫時,this是window

當以方法的形式呼叫時,誰呼叫方法this就是誰

當以建構函式的形式呼叫時,this就是新建立的那個物件

物件的組成

如何訪問物件內部資料,有時不能用

var obj=

,setage:

function

(age)}p.

setname

('bob');

p['setage'](

23);console.

log(p.name,p[

'age'])

;//bob 23

什麼時候不需使用['屬性名']的方式

- 屬性名包含特殊字元,- 空格

- 屬性名不確定

var p=

;//1.給p物件新增乙個屬性:content-type:text/json

'text/json'//不能用

p['content-type']=

'text/json'

;console.

log(p[

'content-type'])

;//2.屬性名不確定

var propname=

'myage'

;var value=18;

不能用p[propname]

=vlaue;

console.

log(p[propname]);

//18

在person建構函式中,為每乙個物件都新增了乙個sayname方法

目前我們的方法是在建構函式內部建立的:

/*

建立乙個person建構函式

*/function

person

(name,age,gender)

;*/this

.sayname=fun;

}//將sayname方法在全域性作用域中定義

/*將函式定義在全域性作用域,汙染了全域性作用域的命名空間

而且定義在全域性作用域中很不安全

*/function

fun();

//建立乙個person的例項

var per=

newperson

("a",18

,"男");

per.

sayname()

;per2.

sayname()

;var per2=

newperson

("b",28

,"男");

console.

log(per.sayname == per2.sayname)

;//true

js 中物件和建構函式

物件 可以有屬性和方法 物件的建立方法 1 var obj 物件字面量 物件直接量 2 建構函式 2.1 系統自帶的函式 object array eg var obj new object 2.2 自定義要符合大駝峰式命名規則 function a var aa new a var first d...

js 物件導向 建構函式

面向過程的時候我們寫 的方式是獲取元素 定義訊號量 定義鎖都是遇見需求就定義乙個變數 但是 無法復用 並且主要就是定義的 是變數 物件導向就是操作的是物件 把寫 的風格從面向過程改為物件導向 把變數封裝成物件即可 面向過程 var username 王老五 var age 13 var 男 cons...

js構造物件

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