JavaScript之對象

來源:互聯網
上載者:User

標籤:一個   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之對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.