javascript - 面向對象 – 對象、對象屬性

 

建立javascript對象能夠經過兩種方式:建立Object對象和建立字面量對象。javascript

  1. /**
  2.      * 面向對象
  3.      */
  4.  
  5.     /** 建立對象 **/
  6.     var person = new Object();
  7.     person.name = "Nicholas";
  8.     person.age = 29;
  9.     person.job = "Soft Engineer";
  10.  
  11.     person.sayName = function() {
  12.     console.log(this.name);
  13.     };
  14.  
  15.     /** 字面量方式 **/
  16.     var person1 = {
  17.         name: "Nicholas",
  18.         age: 29,
  19.         job: "Soft Engineer",
  20.  
  21.         sayName: function() {
  22.             console.log(this.name);
  23.         }
  24.     };

Javascript 對象屬性的特性 java

    對象的屬性特性,能夠經過Object.defineProperty(object, property, descritor)設置:this

  • configurable ,屬性是否可配置。可配置的含義包括:是否能夠刪除屬性( delete ),是否能夠修改屬性的 writable enumerable  configurable 屬性。
  • enumerable ,屬性是否可枚舉。可枚舉的含義包括:是否能夠經過 for...in 遍歷到,是否能夠經過 Object.keys() 方法獲取屬性名稱。
  • writable ,屬性是否可重寫。可重寫的含義包括:是否能夠對屬性進行從新賦值。
  • value ,屬性的默認值。

    使用Object.defineProperty方法定義configurable enumerable writable 特性時,沒有指定的特性默認是falsespa

  1. //"use strict"; //嚴格模式
  2.     /**
  3.      * 面向對象 - 對象屬性的數據屬性
  4.      * 數據屬性包含一個數據值的位置,在這個位置能夠讀取和寫入值,數據屬性4個特性: Configurable, Enumerable, Writable, Value 。
  5.      * Configurableb 表示是否能修改屬性的其它特性,或使用delete刪除屬性,默認爲true。
  6.      * Enumerable 是否能經過for in 循環列舉出對象的該屬性,默認true。
  7.      * Writable 可否修改屬性的值(也便是下面的Value值),默認true。
  8.      * Value 表示屬性的數據值,默認是undefined(未賦值)
  9.      */
  10.  
  11.     // 建立一個對象
  12.     var person = {
  13.         name: "Nicholas"
  14.     };
  15.  
  16.     /**
  17.      * 上面建立了一個名稱爲person的對象,屬性name的4個特性:Configurable(true),Enumerable(true), Writable(true), Value("Nicholas")。
  18.      */
  19.  
  20.     /**
  21.      * 修改屬性的默認特性,Object.defineProperty(obj, propertyName, descObj)
  22.      * 接受3個參數:屬性所在對象,屬性名,屬性特性描述符對象,以下
  23.      */
  24.  
  25.     Object.defineProperty(person, "name", {
  26.         writable: false, // 是否能修改name屬性,false 便是隻讀狀態
  27.         value: "Nick"
  28.     });
  29.  
  30.     console.log(person.name); //Nick
  31.  
  32.     //屬性特性writable設置爲false,這裏沒法修改name屬性的值,嚴格模式下會拋出不會出現報錯。非嚴格模式會被忽略,name仍是Nick。
  33.     person.name = "James"; // 設置無效
  34.  
  35.     console.log(person.name); // Nick
  36.  
  37.     Object.defineProperty(person, "name", {
  38.         writable: true
  39.     });
  40.  
  41.     person.name = "James";
  42.     console.log(person.name); //James
  43.  
  44.     /**
  45.      * configurable 一旦將屬性設置爲false,將不能在設置爲true
  46.      */
  47.  
  48.     Object.defineProperty(person, "name", {
  49.         configurable: false // 不能經過delete刪除屬性
  50.     });
  51.     // 拋出錯誤
  52.     /**
  53.     Object.defineProperty(person, "name", {
  54.         configurable: true
  55.     }); **/
  56.  
  57.     delete person.name; // 非嚴格模式無效,嚴格模式拋錯
  58.     console.log("name = " + person.name);

     

  •  set ,一旦屬性被從新賦值,此方法被自動調用。
  •  get ,一旦屬性被訪問讀取,此方法被自動調用。
  1. var book = {
  2.         _year: 2004,
  3.         edeition: 1
  4.     };
  5.  
  6.     // 定義屬性year,用來訪問_year
  7.     Object.defineProperty(book, "year", {
  8.         get: function() {
  9.             console.log("execute get");
  10.             return this._year;
  11.         },
  12.         set: function(newValue) {
  13.             console.log("execute set");
  14.             if (newValue > 2004) {
  15.                 this._year = newValue;
  16.                 this.edeition += newValue - 2004;
  17.             }
  18.         }
  19.  
  20.     });

     

    對象的屬性特性:數值特性和訪問器特性。數值特性configurableenumerablewritablevalue,表明值和狀態。訪問器特性沒有值,只有一對方法getset對象

相關文章
相關標籤/搜索