JavaScript對象
在JavaScript中,對象是國王。 如果你理解了對象,你懂的JavaScript。
在JavaScript中,幾乎“一切”是一個對象。
- Booleans可以是對象(或對象處理的原始數據)
- Numbers可以是對象(或對象處理的原始數據)
- Strings可以是對象(或作為對象處理原始數據)
- Dates總是對象
- Maths總是對象
- Regular表達式總是對象
- Arrays總是對象
- Functions總是對象
- Objects是對象
在JavaScript中,所有值,除了原始的價值觀,是對象。
原始值是:字符串("John Doe")數字(3.14), true, false, null和undefined 。
對象是包含變量變量
JavaScript的變量可以包含單個值:
對象是變量太多。 但是,對象可以包含許多值。
這些值寫為名稱:值對(名稱和冒號分隔值)。
JavaScript對象是一個名為值的集合
對象屬性
命名值,在JavaScript對象,被稱為屬性 。
屬性 | 值 |
---|---|
firstName | John |
lastName | Doe |
age | 50 |
eyeColor | blue |
寫為名稱值對的對象是類似於:
- 在PHP關聯數組
- 在Python字典
- 用C哈希表
- 在Java中哈希映射
- 在哈希Ruby和Perl
對象的方法
方法是,可以在對象上執行的動作 。
對象屬性既可以是原始值,其他對象和函數。
對象方法是包含一個函數定義的對象屬性。
屬性 | 值 |
---|---|
firstName | John |
lastName | Doe |
age | 50 |
eyeColor | blue |
fullName | function() {return this.firstName + " " + this.lastName;} |
JavaScript對象是命名的值,被稱為屬性和方法的容器。
您將了解更多關於在下一章方法。
創建JavaScript對象
使用JavaScript,您可以定義和創建自己的對象。
有不同的方式來創建新的對象:
- 定義和創建一個對象,使用對象文本。
- 定義和創建一個對象,用關鍵字new。
- 定義對象的構造函數,然後創建構造類型的對象。
在的ECMAScript 5中,對象也可以與該函數創建Object.create()
使用對象文本
這是創建一個JavaScript對象的最簡單方法。
使用對象文本,你倆定義並在一條語句創建一個對象。
一個對象文字是名稱的列表:值對(如age:50 )花括號內{}
下面的示例創建四個屬性的新JavaScript對象:
空格和換行並不重要。 對象定義可以跨越多行:
使用JavaScript的新關鍵字
下面的例子還創建有四個屬性的新JavaScript對象:
例
var
person = new Object();
person.firstName = "John";
person.lastName = "Doe";
person.age = 50;
person.eyeColor = "blue";
試一試» 上面兩個例子做同樣的。 沒有必要用new Object()
為簡單起見,可讀性和執行速度,使用第一個(對象字面方法)。
使用對象構造函數
上面的例子是在許多情況下的限制。 他們只能創建一個對象。
有時候,我們希望有可用於創建一種類型的許多對象“對象類型”。
創建“對象類型”的標準方法是使用一個對象的構造函數:
例
function person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
var
myFather = new person("John", "Doe", 50, "blue");
var myMother = new person("Sally", "Rally", 48, "green");
試一試» 上述功能(人)是一個對象的構造函數。
一旦你有一個對象的構造函數,可以創建同一類型的新對象:
var myFather = new person("John", "Doe", 50, "blue");
var myMother = new person("Sally", "Rally", 48, "green");
在this關鍵字
在JavaScript中,所謂的東西this是“擁有”的JavaScript代碼的對象。
的值this ,在一個功能中使用時,是“擁有”的功能的對象。
的值this ,在一個對象中使用時,是對象本身。
在this關鍵字在對象的構造不具有價值。 它僅用於新對象的替代品。
值this將成為新的對象的時候,構造函數用於創建一個對象。
注意, 這不是一個變量。 它是一個關鍵字。 你不能改變的值this 。
內置的JavaScript構造
JavaScript有本地對象內置的構造函數:
例
var x1 = new Object(); // A new Object object
var x2 = new String(); // A new String object
var x3 = new Number(); // A new Number object
var x4 = new Boolean() // A new Boolean object
var x5 = new Array(); // A new Array object
var x6 = new RegExp(); // A new RegExp object
var x7 = new Function(); // A new Function object
var x8 = new Date(); // A new Date object
試一試» 的Math()對象不是在列表中。 數學是一個全局對象。 新的關鍵字不能在數學中使用。
你知道嗎?
正如你所看到的,JavaScript有對象的基本數據類型字符串,數字,和布爾的版本。
沒有任何理由來創建複雜的對象。 原始值執行快得多。
而且也沒有理由使用新Array() 使用數組常量來代替: []
而且也沒有理由使用新RegExp() 使用模式,而不是文字: /()/
而且也沒有理由使用新Function() 使用函數表達式來代替: function () {}
而且也沒有理由使用new Object() 使用對象文本來代替: {}
例
var x1 = {}; // new object
var x2 = ""; // new primitive string
var x3 = 0; // new primitive number
var x4 = false; // new primitive boolean
var x5 = []; // new array object
var x6 = /()/ // new regexp object
var x7 = function(){}; // new function object
試一試» JavaScript的對象是可變
對象是可變的:它們都通過引用解決,而不是價值。
如果y是一個對象,下面的語句不會產生y的副本:
var x = y; // This will not create a copy of y.
對象x不是y的副本 。 這為 y。 x和y指向同一個對象。
到y的任何改變也將發生變化的x,由於x和y是相同的對象。
例
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}
var x = person;
x.age = 10; // This will change both x.age and person.age
試一試»