JavaScript 对象

对象 (Object) 是面向对象编程的核心概念,javascript也可以对象化,即把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

在 JavaScript 中,对象是由 new 运算符生成,生成对象的函数被称为类(或称为构造函数、对象类型)。生成的对象被称为类的实例,简称为对象。


真实生活中的对象、属性和方法

在真实生活中,可以将汽车看作是是一个对象。

它有诸如车重和颜色等属性,也有诸如启动和停止的方法:

对象属性方法

car.name = maserati

car.model = president

car.length = 4499mm

car.color = white

car.start()

car.drive()

car.brake()

car.stop()

所有汽车都拥有同样的属性,但属性值因车而异。

所有汽车都拥有相同的方法,但是方法会在不同时间被执行。


JavaScript 对象

您之前已经学到,JavaScript 变量是数据值的容器。

这段代码把一个单一值(maserati)赋给名为 car 的变量:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h2>JavaScript 变量</h2>
  5. <p id="demo">
  6. <script>
  7. // 创建并显示变量:
  8. var car = "maserati";
  9. document.getElementById("demo").innerHTML = car;
  10. </script>
  11. </body>
  12. </html>

对象也是变量。但是对象包含很多值。

这段代码把多个值(maserati, president, white)赋值给 car 变量:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 对象</h1>
  5. <p id="demo">
  6. <script>
  7. // 创建对象:
  8. var car = {type:"玛莎拉蒂", model:"总裁", color:"白色"};
  9. // 显示对象中的数据:
  10. document.getElementById("demo").innerHTML = car.type;
  11. </script>
  12. </body>
  13. </html>

值以名称:值对的方式来书写(名称和值由冒号分隔)。

JavaScript 对象是被命名值的容器。


对象属性

(JavaScript 对象中的)名称:值对被称为属性。

  1. var person = {firstName:"比尔", lastName:"盖茨", age:62, eyeColor:"蓝色"};
属性属性值
姓氏比尔
名称盖茨
年龄62
眼睛蓝色

对象方法

对象也可以有方法。

方法是在对象上执行的动作。

方法以函数定义被存储在属性中。

属性属性值
姓氏比尔
名称盖茨
年龄62
眼睛蓝色
fullNamefunction() {return this.firstName + " " + this.lastName;}

方法是作为属性来存储的函数。

  1. var person = {
  2. firstName: "比尔",
  3. lastName : "盖茨",
  4. id : 678,
  5. fullName : function() {
  6. return this.firstName + " " + this.lastName;
  7. }
  8. };

this 关键词

在函数定义中,this 引用该函数的“拥有者”。

在上面的例子中,this 指的是“拥有” fullName 函数的 person 对象。

换言之,this.firstName 的意思是 this 对象的 firstName 属性。


对象定义

我们定义(创建)了一个 JavaScript 对象:

实例
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 对象创建</h1>
  5. <p id="demo">
  6. <script>
  7. // 创建对象:
  8. var person = {firstName:"比尔", lastName:"盖茨", age:62, eyeColor:"蓝色"};
  9. // 显示对象中的数据:
  10. document.getElementById("demo").innerHTML =
  11. person.firstName + " 已经 " + person.age + " 岁了。";
  12. </script>
  13. </body>
  14. </html>

空格和换行都是允许的。对象定义可横跨多行:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 对象创建</h1>
  5. <p id="demo">
  6. <script>
  7. // 创建对象:
  8. var person = {
  9. firstName : "比尔",
  10. lastName : "盖茨",
  11. age : 62,
  12. eyeColor : "蓝色"
  13. };
  14. // 显示对象中的数据:
  15. document.getElementById("demo").innerHTML =
  16. person.firstName + " 已经 " + person.age + " 岁了。";
  17. </script>
  18. </body>
  19. </html>

访问对象属性

您能够以两种方式访问属性:objectName.propertyName或者objectName["propertyName"]

例子 1
  1. objectName.propertyName
例子 2
  1. objectName["propertyName"]

访问对象方法

您能够通过如下语法访问对象方法:

  • objectName
  • methodName()
  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 对象属性</h1>
  5. <p>有两种不同的方法来访问对象属性。</p>
  6. <p>您可以使用 person.property 或 person["property"]。</p>
  7. <p id="demo">
  8. <script>
  9. // 创建对象:
  10. var person = {
  11. firstName: "比尔",
  12. lastName : "盖茨",
  13. id : 12345
  14. };
  15. // 显示对象中的数据:
  16. document.getElementById("demo").innerHTML =
  17. person.firstName + " " + person.lastName;
  18. </script>
  19. </body>
  20. </html>

如果您不使用 () 访问 fullName 方法,则将返回函数定义:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>JavaScript 对象属性</h1>
  5. <p>有两种不同的方法来访问对象属性。</p>
  6. <p>您可以使用 person.property 或 person["property"]。</p>
  7. <p id="demo">
  8. <script>
  9. // 创建对象:
  10. var person = {
  11. firstName: "比尔",
  12. lastName : "盖茨",
  13. id : 12345
  14. };
  15. // 显示对象中的数据:
  16. document.getElementById("demo").innerHTML =
  17. person["firstName"] + " " + person["lastName"];
  18. </script>
  19. </body>
  20. </html>

方法实际上是以属性值的形式存储的函数定义。


请不要把字符串、数值和布尔值声明为对象!

如果通过关键词 "new" 来声明 JavaScript 变量,则该变量会被创建为对象:

  1. objectName.methodName()

请避免字符串、数值或逻辑对象。他们会增加代码的复杂性并降低执行速度。