1. 程式人生 > 其它 >JavaScript:建立物件

JavaScript:建立物件

技術標籤:★ JavaScript

建立物件

字面量形式建立物件

//格式
var  物件名 = {
    屬性名: 屬性值,
    屬性名: 屬性值,
    方法名: function() {}
};

//建立car物件
<script type="text/javascript">
var car = {
	//屬性
	brand: "寶馬",
	price:  10000000,
	color: "grey",
	
	//方法
	run: function(){ console.log("跑起來了!!"); },
	stop: function(){ console.log("停下來了!!"); }
};
</script>

查詢輸出,注意car.run輸出的是整個方法體,car.run()是執行方法。

新增屬性

物件名.屬性名 = 值;

物件名["屬性名"]= 值;

刪除屬性

delete 物件名.屬性名;

delete 物件名["屬性名"];

修改屬性

物件名.屬性名 = 值;

物件名["屬性名"]= 值;

查詢屬性

物件名.屬性名;

物件名["屬性名"];

區別:點語法不支援變數、而中括號支援變數

注意:如果物件中有該屬性,那麼返回屬性的值。如果物件中沒有該屬性,那麼返回undefined

遍歷屬性

for (var 變數名 in 物件名) {
    console.log(變數名+":"+物件名[變數名]);
}

in關鍵字

該關鍵字的作用是判斷一個屬性是否屬於該物件

格式:屬性名in 物件

結果為true(包含該屬性)或者false(不包含該屬性),該關鍵字不僅可以判斷私有屬性,也可以判斷原型中的公有屬性

呼叫方法

物件名.方法名();

物件名["方法名"]();

注意:如果在呼叫方法時不加小括號,會獲取該方法的方法體

修改方法

物件名.方法名 = function() {};

物件名["方法名"]= function() {};

刪除方法

delete 物件名.方法名;

delete 物件名["方法名"];

字面量形式建立物件的利弊

優點:簡單、易懂

缺點:

不利於提高程式碼的複用性

通過字面量形式建立的物件都是Object型別,沒有辦法進行細化物件的型別

工廠模式建立物件

就是把建立物件的語句封裝到一個函式中,該函式的作用就是可以批量的建立具有同種屬性的物件,它有利於提高程式碼的複用性

//格式1
function 函式名(引數1,引數2…) {
    var obj = new Object(); //格式2將第一行語句替換為 var obj = {};
    obj.屬性名1 = 引數1;
    obj.屬性名2 = 引數2;
    obj.方法名3 = function() {};
    return obj;
}
//格式3
function 函式名(引數1,引數2…) {
    return {
        屬性名1:引數1,
        屬性名2:引數2,
        方法名3:function(){}
    }
}

//建立createObj工廠
<script type="text/javascript">
    function createObj(name,age,gender){
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.gender = gender;
        obj.speak = function() { console.log("hello world") };
        return obj;
    }    
    var res1 = createObj("張三",10,"男");
    var res2 = createObj("李四",18,"男");
</script>

工廠模式建立物件的利弊

優點:解決了批量建立具有同種屬性的物件的問題,提高了程式碼的複用性

缺點:也沒有解決物件型別的區分問題

構造方法建立物件

建立物件的方式有字面量形式建立物件,工廠模式建立物件,但是他們都沒有解決物件型別的區別問題。構造方法就是一個用來批量建立具有同種屬性的物件的特殊函式。該種建立物件的方法解決了物件型別區分問題

//格式
function 函式名(引數1,引數2,引數3…) {
    this.屬性名1 = 引數1;
    this.屬性名2 = 引數2; 
    this.方法名 = function(){};
}

//建立Car構造方法
<script type="text/javascript">
    function Car(brand,price,color){
        this.brand = brand;
        this.price = price;
        this.color = color;
        this.run = function(){ console.log('跑起來了!!'); };
        this.stop = function(){ console.log('停下來了!!'); };
    }
    var res = new Car("QQ",30000,"red");
</script>

注意

建構函式的本質也是函式,但是為了普通函式做區分,建構函式的名字通常為單詞首字母大寫;

如果構造方法中不包含引數,那麼在呼叫時可以省略小括號,如var arr = newArray;

如果是內建的構造方法,那麼在呼叫時可以省略new關鍵字,如var arr = Array(); 但是不可以將new關鍵字和小括號同時省略,否則無法建立物件。

建構函式中可以定義變數,這個變數屬於該函式的區域性變數,在該函式內部可以使用,但是要注意由該建構函式創建出來的物件無法訪問該變數,因為它不屬於任何物件,為了提高程式碼的安全性和健壯性,可以在建構函式中建立set和get方法對此區域性變數進行操作。

構造方法中不加return關鍵字,如果加return關鍵字,那麼如果返回值的型別為基本型別,不影響構造方法建立物件,即此時依舊可以返回物件,但是如果return後面的返回值為引用型別,那麼構造方法創建出來的物件就會被覆蓋掉。