📜  JavaScript |对象

📅  最后修改于: 2022-05-13 01:58:10.327000             🧑  作者: Mango

JavaScript |对象

在我们之前关于 JavaScript 中的面向对象编程简介的文章中,我们已经看到了所有常见的 OOP 术语,并了解了它们在 JavaScript 中如何存在或不存在。在本文中,将详细讨论对象。

创建对象

在 JavaScript 中,可以使用两种不同的方法创建对象,即字面量形式和构造形式。

  • 字面量形式:字面量形式使用对象字面量的构造,可以说是包含在一对花括号内的键值对的集合。语法形式如下所示。
    var obj = {
      key1: value1,
      key2: value2,
      ...
    };
    
  • 构造形式:构造形式使用对象构造函数或new关键字创建一个空对象广告,然后将属性一一添加到对象中。语法形式如下所示。
    • 对象构造函数:在这种方法中,用户创建一个显式函数以将所需值作为参数并将它们分配为所需对象的属性。
      function obj(value1, value2, ...) {
          this.key1 = value1;
          this.key2 = value2;
          ...
      }
      
    • 使用 New 关键字:此方法在任何构造方法或任何内置构造方法(如 Object、Date、String 等)前面使用 New 关键字,并通过将其挂载到内存来创建以下对象的新实例。
      var obj = new Object();
      obj.key1 = value1;
      obj.key2 = value2;
      ...
      

使用对象字面量和构造形式之间的区别:构造形式和字面量形式都导致创建完全相同类型的对象,即两种方法的最终结果相同。两者之间的唯一区别是对象字面量可以同时处理多个键值对,因此更方便,而另一方面,对于构造形式的对象,我们必须分别添加属性陈述。
注意:使用构造形式而不是对象字面量来创建对象是非常罕见的,因此对于任何进一步的说明,我们将在大多数情况下使用对象字面量。

内置对象

JavaScript 由一堆内置对象组成,下面的列表探索了其中的大部分。尽管这些内置函数看起来像是任何其他 OOP 中的实际类型或类,但在 JavaScript 中,这些只是可以用作构造函数来创建特定子类型的对象的函数。

  • 细绳
  • 数字
  • 布尔值
  • 目的
  • 函数
  • 大批
  • 日期
  • 正则表达式
  • 错误

现在让我们举个例子来区分对象和基元。

// Create string primitive.
var strPrimitive = "GeeksforGeeks";
typeof strPrimitive; // "string"
strPrimitive instanceof String; // false
  
// Use the Built-in String Function as Constructor.
var strObject = new String( "GeeksforGeeks" );
typeof strObject; // "object"
strObject instanceof String; // true
  
// inspect the object sub-type
Object.prototype.toString.call( strObject ); // [object String]

在上面的示例中,我们看到创建字符串原语并没有创建对象,也没有创建 String 的实例。基元是字面量和不可变值,要执行计算长度或更改任何位置的任何字符等任务,我们必须使用 String 类型的 Object。但是 JavaScript 是一种动态语言,对开发人员来说幸运的是,只要有任何操作需要,JavaScript 就会将字符串原语强制转换为 String 类。需要注意的是,由于内部强制,尽可能多地使用原语而不是对象

对象的内容

JavaScript 对象由一组称为属性的键值对组成。所有属性都以 JavaScript 对象命名,键部分表示属性名称,值部分表示属性值。属性值可以是原始数据类型或对象甚至函数。尽管该属性由对象拥有,但也可以全局访问。定义对象属性的一般语法如下所示,

objectName.objectProperty = propertyValue;

下面的程序将清除我们上面讨论的概念,

var myObj = {
  
  // Integer Property.
  int_prop: 5,
  
  // String Property. 
  str_prop: "GeeksforGeeks",
  
  // Object Property (Date). 
  obj_prop: new Date(),
  
  // Object Property.
  inner_obj: {
    int_prop: 6   
  },
  
  // Function Property.
  func_prop: function(){
     console.log("Welcome to GeeksforGeeks!");
  }
};
  
console.log(myObj.int_prop);
console.log(myObj.str_prop);
console.log(myObj.obj_prop.toLocaleTimeString());
console.log(myObj.inner_obj.int_prop);
myObj.func_prop();

输出:

5
GeeksforGeeks
5:47:55 PM
6
Welcome to GeeksforGeeks!

按照惯例,与对象关联的函数称为方法。这被认为是函数和方法之间的微小差异。函数是一组语句的独立序列,而方法与对象相关联,通常由this 关键字引用。

定义由对象拥有的全局变量:这主要是在方法上完成的,这个过程相当简单,我们将按照我们习惯的方式定义我们的函数,并且在将函数定义为对象属性的成员时,我们将只给出函数的名称作为一个键的值。让我们看看下面给出的例子。

// Define Function Explicitly.
function toGreet()
{
  console.log("Hello There!");
}
  
var myObj = {
  
  // Mention Function-Name as Value.
  greet: toGreet,
  
  // Define Function implicitly.
  byWhom: function(){
    console.log(" - GeeksforGeeks.org");
  }
}
  
myObj.greet();
myObj.byWhom();

输出:

Hello There!
 - GeeksforGeeks.org

注意: 'with'关键字可用于引用对象的属性。指定为 with 参数的对象在随后的块的持续时间内成为默认对象。这一般不建议开发人员使用。在 JavaScript 严格模式下不允许使用 with。

要点

  • 日期值只能以其构造的对象形式创建,因为它们没有字面量形式。
  • 对象、数组、函数和 RegExps(正则表达式)都是对象,无论它们的创建方法如何,即是使用字面量还是构造形式来创建它们。
  • 构造的形式可以在创建对象时提供更多的定制,这是使用字面量形式的唯一优势。

至此,我们可以结束关于 JavaScript 中对象的讨论,并开始走在定义和描述与对象相关的重要主题的道路上。