最新的Web開發教程
 

JavaScript對象


JavaScript對象

在JavaScript中,對象是國王。 如果你理解了對象,你懂的JavaScript。

在JavaScript中,幾乎“一切”是一個對象。

  • Booleans可以是對象(或對象處理的原始數據)
  • Numbers可以是對象(或對象處理的原始數據)
  • Strings可以是對象(或作為對象處理原始數據)
  • Dates總是對象
  • Maths總是對象
  • Regular表達式總是對象
  • Arrays總是對象
  • Functions總是對象
  • Objects是對象

在JavaScript中,所有值,除了原始的價值觀,是對象。

原始值是:字符串("John Doe")數字(3.14), true, false, nullundefined


對象是包含變量變量

JavaScript的變量可以包含單個值:

var person = "John Doe";
試一試»

對象是變量太多。 但是,對象可以包含許多值。

這些值寫為名稱:值對(名稱和冒號分隔值)。

var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
試一試»

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對象:

var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
試一試»

空格和換行並不重要。 對象定義可以跨越多行:

var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};
試一試»

使用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
試一試»