什麼是物件
為什麼要用物件
//代表兩個屬性,較為繁瑣
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);//truethis的情況
當以函式的形式呼叫時,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 ...