Javascript 對象

2018-01-12 19:39 更新

Javascript面向?qū)ο笤O(shè)計 - Javascript對象


JavaScript中的對象是動態(tài)的。 我們可以添加和刪除屬性需要。

定義屬性

有兩種基本的創(chuàng)建對象的方法:

  • Use the Object constructor
  • Use an object literal.

例如:

var book1 = { 
    name : "Javascript" 
}; 

var book2 = new Object(); 
book2.name = "Javascript"; 

book1.website = "www.o2fo.com"; 
book2.website = "www.o2fo.com"; 

book1.name = "CSS"; 
book2.name = "HTML"; 

console.log(book1.name);
console.log(book1.website);
console.log(book2.name);
console.log(book2.website);

上面的代碼生成以下結(jié)果。

注意

book1和book2都是具有name屬性的對象。然后,為這兩個對象分配一個網(wǎng)站屬性。

我們可以在對象或更高版本的定義之后添加屬性。

對象打開以進行修改,除非您另行指定。

當(dāng)一個屬性首次添加到對象時,JavaScript在對象上使用一個名為[[Put]]的內(nèi)部方法。

[[Put]]方法在對象中創(chuàng)建一個存儲來存儲屬性。

[[Put]] 在對象上創(chuàng)建一個屬性。

該屬性稱為自有屬性。

新添加的屬性(自己的屬性)表示對象的特定實例具有該屬性。

屬性(自己的屬性)直接存儲在實例上。

將新值分配給現(xiàn)有屬性時,調(diào)用稱為 [[Set]] 的單獨操作。

[[Set]]操作將使用新的屬性替換當(dāng)前值。


檢測屬性

檢查對象中是否存在屬性使用運算符中的。

運算符中的在特定的查找具有給定名稱的屬性對象,并返回true如果找到它。

以下代碼顯示了如何使用中的來檢查book1對象中的一些屬性:

var book1 = { 
    name : "Javascript" 
}; 

var book2 = new Object(); 
book2.name = "Javascript"; 

book1.website = "www.o2fo.com"; 
book2.website = "www.o2fo.com"; 

book1.name = "CSS"; 
book2.name = "HTML"; 

console.log("name" in book1);     // true 
console.log("age" in book1);      // true 
console.log("title" in book1);    // false 

上面的代碼生成以下結(jié)果。

我們可以以同樣的方式檢查方法的存在。

以下向book1添加了一個新函數(shù)writeLine(),并在中使用確認功能的存在。

var book1 = { 
    name : "Javascript", 
    writeLine : function() { 
        console.log(this.name); 
    } 
}; 

console.log("writeLine" in book1);  // true 

上面的代碼生成以下結(jié)果。

自有屬性和創(chuàng)建屬性

以下顯示如何區(qū)分自己的屬性和建筑屬性。

操作符中的檢查自己的屬性和原型屬性。

hasOwnProperty()方法存在于所有對象上僅當(dāng)給定屬性存在且是自己的屬性時才返回true。

以下代碼比較在中使用的結(jié)果 hasOwnProperty()在book1的不同屬性:

var book1 = { 
    name : "Javascript", 
    writeLine : function() { 
        console.log(this.name); 
    } 
}; 

console.log("name" in book1);                     
console.log(book1.hasOwnProperty("name"));      

console.log("toString" in book1);               
console.log(book1.hasOwnProperty("toString"));  

上面的代碼生成以下結(jié)果。

刪除屬性

將屬性設(shè)置為 null 不會從對象中完全刪除該屬性。

這樣的操作調(diào)用 [[Set]] ,值為null,只有替換屬性的值。

delete 運算符完全從對象中刪除一個屬性。

delete 運算符在單個對象屬性上工作,并調(diào)用內(nèi)部操作名為 [[Delete]]

當(dāng)刪除操作成功時,它返回true。

以下代碼顯示如何使用delete操作符。

var book1 = { 
    name : "Javascript" 
}; 

console.log("name" in book1);     

delete book1.name;                

console.log("name" in book1);     
console.log(book1.name);     

上面的代碼生成以下結(jié)果。

枚舉

默認情況下,添加到對象的所有屬性都是可枚舉的。

我們可以使用for-in循環(huán)遍歷這些屬性。

可枚舉屬性的[[Enumerable]]屬性設(shè)置為true。

以下循環(huán)輸出對象的屬性名稱和值:

var property; 
var book1 = { 
    name : "Javascript" 
}; 

var property; 

for (property in book1) { 
    console.log("Name: " + property); 
    console.log("Value: " + book1[property]); 
} 

上面的代碼生成以下結(jié)果。

Object.keys()方法檢索ienumerable屬性名稱的數(shù)組,如下所示:

var book1 = { 
    name : "Javascript" 
}; 

var properties = Object.keys(book1); 

var i, len; 

for (i=0, len=properties.length; i < len; i++){ 
    console.log("Name: " + properties[i]); 
    console.log("Value: " + book1[properties[i]]); 
} 

上面的代碼生成以下結(jié)果。

for-in循環(huán)枚舉原型屬性,而Object.keys()僅返回自己的(實例)屬性。

并非所有屬性都是可枚舉的。

對象上的大多數(shù)本地方法都有其[[Enumerable]]屬性集假。

我們可以通過使用propertyIsEnumerable()方法來檢查屬性是否可枚舉,它存在于每個對象上:

var book1 = { 
    name : "Javascript" 
}; 

console.log("name" in book1);                          
console.log(book1.propertyIsEnumerable("name"));       

var properties = Object.keys(book1); 

console.log("length" in properties);                   
console.log(properties.propertyIsEnumerable("length"));

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號