1. 程式人生 > >關於JavaScript對象概念的總結

關於JavaScript對象概念的總結

讀取 調用 brush say 好的 TP value bom www.

原文

  https://www.jianshu.com/p/88213b499c4b

大綱

  前言
  1、對象的相關概念
  2、對象的創建(簡單創建)
  3、對象的屬性
    3.1、數據屬性
    3.2、訪問器屬性
  4、設置和讀取對象中的屬性
  5、變量存儲的是對象的引用
  6、基本數據類型可以自動轉換成對象數據類型
  7、獲取對象屬性的點方法和中括號法的區別

前言

  以下論述是我關於對象的知識點的認識和理解,其中包括了對象是什麽?創建對象的基本方式以及對象的相關概念的講解,希望能給讀者帶來一些幫助。

1、對象的相關概念

  1、ECMAScript是基於對象(Object)的,對象是屬性(properties)的集合,每個屬性有零個或多個特性(attributes),它確定怎麽使用此屬性。
  2、ECMAScript通過對象確定調用者要調用的地方,通過調用對象的屬性和方法可以來滿足調用者要怎麽調用對象。
  3、ECMAScript對對象的定義:無序屬性的集合,其屬性可以包含基本值、對象或者函數。
  4、對象是屬性的集合,並有一個原型對象。原型可以是空值。嚴格來說,這就相當於說對象是一組沒有特定順序的值。
  5、對象的每個屬性或方法都有一個名字,而每個名字都映射到一個值。正因為這樣,我們可以把ECMAScript的對象想象成散列表:無非就是一組名值對,其中值可以是數據或函數。
  6、JavaScript本身包含許多對象,這些對象稱之為JavaScript的內建對象。
  7、瀏覽器自身也是對象集合的模型,可以通過瀏覽器對象來操作瀏覽器,瀏覽器對象模型(BOM),文檔對象模型(DOM)
  8、對象的存在是為了解決基本數據類型的局限性
  9、對象是自我包含的數據集合,包含在對象裏的數據可以通過兩種形式——即屬性(property)和方法(method)訪問:     a:屬性是隸屬於某個特定對象的變量;     b:方法是只有某個特定對象才能調用的函數。
  10、實例是對象的具體表現:對象是統稱,實例是個體。
  11、有些對象(如:person)在JavaScript語言裏並不存在。我們可以利用JavaScript語言來創建自己的對象——術語稱之為用戶定義對象(user-defined object)。有些對象 (如:Array、Date)在JavaScript語言中預先定義好的對象,而我們可以把這些對象直接在自己的腳本裏運用,人們把這些對象稱為內建對象(native object)。

2、對象的創建(簡單創建)

//1、Object
var person = new Objcet();
person.name = "Nicholas";
person.age = 29;
person.job = "Software Engineer";
person.sayName = function(){
    console.log(this.name);
}
//2、對象字面量
var person = {
    name:"Nicholas";
    age:29,
    job:"Software Engineer",
    sayName: function(){
        console.log(this.name);
    }
}

3、對象的屬性

  ECMAScript中有兩種屬性:數據屬性和訪問器屬性

3.1、數據屬性

/*
    數據屬性包含一個數據值的位置,在這個位置可以讀取和寫入值
*/
var person = {
    name : "Nicholas"
};
>/操作數據屬性
/*
    通過delete、add來操作數據屬性
    對未聲明的數據屬性進行賦值相當於先創建這個屬性然後再對這個屬性進行賦值
*/
‘use strice‘
var person = {
    name : "personName",
    age : 23
}
delete person.age;
person.type = ‘chinese‘;
console.log(person);//{name: "personName", type: "chinese"}

>/通過Object.defineProperty()
/*
    可以通過
      Object.defineProperty(ObjectName , attrituteName , 
                           {descriptor : true/false});
    來操作對象的屬性
*/
‘use strice‘
var person = {
    name : "personName",
    age : 23
}
console.log(person);//{name: "personName", age: 23}
person.name = "hh";
console.log(person);//{name: "hh", age: 23}
// Object.defineProperty(person,"name",{
//     writable : false
// })//標準格式
Object.defineProperty(person,"name",{
    writable : false,
    value : "kk"
})
console.log(person);//{name: "kk", age: 23}
person.name = "gg";
console.log(person);//{name: "kk", age: 23}

3.2、訪問器屬性

/*
    訪問器屬性不包含數據值:它們包含一對兒getter和setter函數(不過這兩個函數都不是
必需的)。
        
    在讀取訪問器屬性是,會調用getter函數,這個函數負責返回有效值;
    
    在寫入訪問器屬性時,會調用setter函數並傳入新值,這個函數負責決定如何處理數據
*/

>/ 操作訪問器屬性
//訪問器屬性:yyy
‘use strice‘
var book = {
    _year : 2004,
    edition : 1 
       
};
console.log(book);
Object.defineProperty(book,"yyy",{
    get:function(){
        return this._year;
    },
    set:function(newValue){
        if(newValue > 2004){
            this.edition += newValue - this._year;
            this._year = newValue;
        }
    }
});
console.log(book.yyy);
book.yyy = 2008;
console.log(book.yyy);
console.log(book);

4、設置和讀取對象中的屬性

//1、設置某個屬性的特性
Object.defineProperty(ObjectName , attrituteName , 
                      {descriptor : true/false});
//2、設置多個屬性的特性
Object.defineProperties(ObjectName , {attrituteName : 
{descriptor : true/false} , attrituteName : {descriptor : true/false}});
//3、讀取屬性的特性
var descriptors = Object.getOwnPropertyDescriptor(ObjectName,attrituteName);
console.log(descriptors.descriptorName);

5、變量存儲的是對象的引用

  1、當我們創建對象並把創建的對象賦值給一個用var聲明的變量,這個變量中存儲的是這個對象的地址,是這個對象的引用而不是對象本身的賦值。
  2、由於變量存儲的是對象的引用,所以一些看似是對該變量‘對象’的操作,其實實質上是對這個變量包含的引用所指向的對象的操作,而不是對這個變量的操作,因為這個變量中不是什麽對象,而是一個地址引用。

6、基本數據類型可以自動轉換成對象數據類型

  1、對於一些基本數據類型,其實他們也具有對應的對象類型。
  2、當一些數據可以表明自己是哪種基本數據類型,當調用到該基本數據類型對應的對象數據類型的時候,JavaScript就會自動的將該基本數據類型轉換成對象數據類型。

7、獲取對象屬性的點方法和中括號法的區別

//1、中括號法可以用變量作為屬性名,而點方法不可以;
var obj = {};
obj.name = ‘張三‘;
var myName = ‘name‘;
console.log(obj.myName);//undefined,訪問不到對應的屬性
console.log(obj[myName]);//張三

//2、中括號法可以用數字作為屬性名,而點語法不可以;

//3、中括號法可以使用js的關鍵字和保留字作為屬性名,而點語法不可以(盡量避免在變量或者屬性中使用關鍵字或保留字);

  

關於JavaScript對象概念的總結