標籤:一個 fine 屬性 cal 字串 資料 code object turn
對象就是擁有屬性和方法的資料。
在JavaScript中,一切皆對象。如數組、函數、字串......
對象的定義和訪問
在JavaScript中,我們可以用點(.)和方括弧([])來訪問對象;定義對象有以下幾種方法:
1、對象字面量,如:var obj = {}
2、new關鍵字,如:var obj = new Object()
3、Object.create(),如:var obj = Object.create(Object.prototype)
4、建構函式、原廠模式、原型模式、建構函式+原型等,如:function F(){} var obj = new F()
5、刪除對象的屬性用delete關鍵字,不能刪除原型上的屬性
1 // 建立一個Null 物件 2 var obj = {}; 3 var obj1 = new Object(); 4 // 給對象添加屬性和方法 5 obj.name = "lily"; 6 obj.sayHi = function(){ 7 cons.log("Hello World"); 8 } 9 10 // 建立帶有屬性和方法的對象11 var obj2 = {12 name: "Kimmy",13 age: 12,14 sayHi: function(){15 console.log("Hello Kimmy");16 }17 }18 19 // 通過建構函式建立對象20 function Car(name,color,price){21 this.name = name;22 this.color = color;23 this.price = price;24 }25 var car = new Car("BMW","銀色","55");26 27 // 訪問對象的屬性和方法28 car.name; // 返回BMW29 car["color"]; // 返回銀色30 31 // 原廠模式方法32 function createPerson(name,age,job){33 var person = new Object();34 person.name = name;35 person.age = age;36 person.job = job;37 person.sayName = function(){38 alert(person.name);39 }40 return person;41 }42 43 var person1 = createPerson("zh","62","Doctor");44 person1.sayName();
對象執行個體的屬性和方法
1、constructor屬性 - 儲存當前對象的建構函式
2、prototype屬性 - 原型屬性,在建立對象時就設定好了,是用來繼承屬性的
3、hasOwnProperty(屬性名稱)方法 - 檢測給定的屬性名稱是否是對象自身的屬性,對於繼承的屬性返回false
4、isPrototypeOf(object)方法 - 判斷一個對象是否在object對象的原型鏈上
5、propertyIsEnumberable(屬性名稱)方法 - 是hasOwnProperty的增強版,檢測對象有自身的且可枚舉的屬性時返回true
6、toString()、toLocalString()、valueOf()方法
7、for...in...遍曆對象可枚舉的屬性
1 // constructor 2 var obj = { 3 name: "Lee", 4 age:12, 5 say: function(){ 6 console.log("hello"); 7 } 8 } 9 obj.constructor; // 返回function Object(){}10 11 // hasOwnProperty12 obj.hasOwnProperty("age"); // 返回true13 obj.hasOwnProperty("toString"); // 返回false,toString是繼承的屬性14 15 // propertyIsEnumerable16 obj.propertyIsEnumerable("say"); // 返回true17 obj.propertyIsEnumerable("toString"); // 返回false,toString不可枚舉18 19 // for...in遍曆20 for(var o in obj){21 console.log(o); // 返回name、age、say22 }23 24 // isPrototypeOf25 function MyObject() {}26 var obj = new MyObject();27 console.log(Object.prototype.isPrototypeOf(obj)); // 返回true 由於MyObject是繼承自Object對象,而繼承是通過prototype實現的,所以Object的prototype必定在MyObject對象執行個體的原型鏈上
屬性的特性
在JavaScript中,屬性分為資料屬性和存取器屬性,資料屬實只是一個值,而存取器屬性是由getter和setter定義。
資料屬性具有可寫(writable)、可配置(configurable)、可枚舉(enumberable)和value特性。我們可以通過Object.defineProperty()和Object.defineProperties()對這四個特性進行設定。
writable - 表示屬性值是否可修改,預設為true
configurable - 表示是否可通過delete來刪除屬性,預設為true
enumberable - 表示是否可通過for...in來枚舉屬性,預設為true
value - 表示屬性的值,預設為undefined
1 // obj對象中的name、age、sex屬性現在是可刪除的 2 var obj = { 3 name: "Jimmy", 4 age: 12, 5 sex: "M" 6 } 7 obj.name; // 返回Jimmy 8 delete obj.name; // 返回true 9 obj.name; // 返回undefined10 11 // 我們可以通過Object.defineProperty()來設定起可寫、可配置、可枚舉和value,只能對一個屬性進行操作,若要對多個屬性進行操作,可通過Object.defineProperties()來設定12 /*13 * Object.defineProperty(obj,propertyName,option)14 * obj - 需要設定的那個對象15 * propertyName - obj對象中要設定的屬性名稱16 * option - 一個對象,配置其4個特性17 */ 18 var obj1 = {19 name:"Jimmy",20 age:25,21 sex:"M"22 }23 Object.defineProperty(obj1,"name",{24 writable:false, // false不可寫;true可寫25 configurable:false, // false不可配置;true可配置26 enumberable:false, // false不可枚舉;true可枚舉27 value:"Kimmy" // 對name設值 28 });29 obj.name; // 返回Kimmy30 delete obj.name; // 返回false31 obj.name; // 返回Kimmy32 33 /*34 * Object.defineProperties(obj,option)35 * obj - 需要設定的那個對象36 * option - 一個映射表,對obj中的需要設定的屬性分別配置其4個特性37 */ 38 var obj2 = {39 name:"Lily" 40 age:2541 }42 Object.defineProperties(obj2,{43 name:{44 writable:true, // false不可寫;true可寫45 configurable:false, // false不可配置;true可配置46 enumberable:false // false不可枚舉;true可枚舉47 },48 age:{49 writable:true, // false不可寫;true可寫50 configurable:false, // false不可配置;true可配置51 enumberable:true // false不可枚舉;true可枚舉 52 }53 });
存取器屬性不具有可寫性(writable)和value值,但是它用有一堆getter和setter函數。
get - 讀取屬性時調用,預設為undefined
set - 設定屬性時調用,預設為undefined
1 // 定義存取器 2 var obj = { 3 age:15, // 資料屬性 4 5 // 存取器屬性 6 get type(){ 7 return this.age > 18 ? "成年" : "未成年"; 8 }, 9 set type(age){10 this.age = age;11 }12 };13 obj.type; // 返回 未成年14 obj.type = 20;15 obj.type; // 返回 成年 16 obj.age; // 返回20
注意:get、set和函數體之間沒有用冒號給開,而是用空格
本文僅供自己在平時工作學習時作筆記使用!如有錯誤請多多指出!!!
JavaScript之對象