编辑这个页面须要登录或更高权限!

JavaScript 对象构造函数

在前面的章节中,我们学习了如何在JavaScript中创建对象。

前几章中的示例是有限的。它们仅创建单个对象。

有时我们需要一个“ 模型”来创建许多相同类型的对象(示例)。

创建“模型”的方法是使用对象构造函数

一个对象的构造函数可以很容易地创建多个对象(示例)具有相同的属性和方法。

在下面的示例中,function User()是一个对象构造函数:

  function User(fname, lname, age, loc) {
   this.firstName = fname;
   this.lastName = lname;
   this.age = age;
   this.location = loc;
  }

通过使用new关键字调用构造函数来创建相同类型的对象:

var Seagull = new User("Seagull", "Anna", 22, "New Delhi");
var tarush = new User("Tarush", "Balodhi", 34, "Bihar");
测试看看‹/›

正如您看到的,我们可以通过使用不同的参数调用User构造函数来快速构建大量不同的用户对象。这与JavaScript在其内置构造函数(如Array()和Date())中使用的模式完全相同。

this关键字

JavaScript有一个特殊的关键字this,您可以在方法中使用它来引用当前对象。

this在对象中使用时,它的值是对象本身。

在构造函数中this没有值。它代替了新对象。创建新对象时,this的值将成为新对象。

向对象添加属性

为了向对象添加新属性,您可以使用赋值运算符(=)将新值分配给属性。

Seagull.weapon = "Sword";
测试看看‹/›

注意:该属性将添加到Seagull中。不要。(不适用于任何其他User对象)。

向对象添加方法

为了向对象添加新方法,您可以使用赋值运算符(=)将新函数分配给属性。

Seagull.greet = function() {
return "Hello World";
};
测试看看‹/›

注意:该方法将被添加到Seagull中。(不指向任何其他User对象)。

向构造函数添加属性

我们不能像向现有对象添加新属性那样,向构造函数添加新属性:

User.weapon = "Sword";
测试看看‹/›

要向构造函数添加新属性,必须将其添加到构造函数中:

function User(fname, lname, age, loc) {
   this.firstName = fname;
   this.lastName = lname;
   this.age = age;
   this.location = loc;
   this.weapon = "Sword";
}
测试看看‹/›

有时,我们希望在后期将新属性添加到一个构造函数中,该构造函数将在所有对象(示例)之间共享。答案是对象原型

向构造函数添加方法

构造函数也可以定义方法。

我们不能像向现有对象添加新方法一样,向构造函数添加新方法。

向对象添加方法必须在构造函数内完成。

function User(fname, lname, age, loc) {
   this.firstName = fname;
   this.lastName = lname;
   this.age = age;
   this.location = loc;
   this.fullName = function() {
   return this.firstName + " " + this.lastName;
   };
}
测试看看‹/›

有时我们想在后期向构造函数添加新方法,该方法将将在所有对象(示例)之间共享。答案是对象原型

JavaScript 内置构造函数

JavaScript具有以下用于本机对象的内置构造函数:

let x1 = new String(); //一个新的String对象。
let x2 = new Number(); //一个新的number对象。
let x3 = new Boolean(); //一个新的布尔对象。
let x4 = new Object(); //一个新Object对象。
let x5 = new Array(); //一个新的Array对象。
let x6 = new RegExp(); //一个新的RegExp对象。
let x7 = new Date(); //一个新的date对象。
let x8 = new Function(); //一个新函数对象。
测试看看‹/›

不要将Number、String或Boolean声明为对象

正如你可以在上面看到,JavaScript有基本数据类型的对象有String,Number和Boolean。

我们没有理由创建复杂的对象。因为原始值要快得多。

始终将数字,字符串或布尔值视为原始值。不作为对象。

将这些类型声明为对象会降低执行速度,并产生意外结果。

var str1 = "New Delhi";
var str2 = new String("New Delhi");

document.write(str1 === str2); // 返回错误,因为str1和str2具有不同的类型
测试看看‹/›

无法比较对象:

var str1 = new String("New Delhi");
var str2 = new String("New Delhi");

document.write(str1 == str2); // 返回错误,因为str1和str2具有不同的类型
document.write(str1 === str2); // r返回错误,因为str1和str2具有不同的类型
测试看看‹/›

也可以这样做:

  • 使用{}代替new Object()

  • 使用""代替new String()

  • 使用0代替new Number()

  • 使用false代替new Boolean()

  • 使用[]代替new Array()

  • 使用/()/代替new RegExp()

  • 使用function (){}代替new Function()

let x1 = {};
let x2 = "";
let x3 = 0;
let x4 = false;
let x5 = [];
let x6 = /()/;
let x7 = function(){};
测试看看‹/›

字符串基元和字符串对象

通常,JavaScript字符串是由字面量创建的原始值:var city = "New Delhi";。

但是,也可以使用new关键字,将字符串定义为对象: var city = new String("New Delhi");。

在“ JS字符串 ”一章中了解为什么不应将字符串创建为对象。

数字基元和数字对象

通常,JavaScript数字是由字面量创建的原始值:var num = 50;。

但是,也可以使用new关键字,将数字定义为对象:var num = new Number(50);。

在“ JS Numbers ”一章中了解为什么不应该将数字创建为对象。

布尔基元和布尔对象

通常,JavaScript字布尔值是由字面量创建的原始值:var x = false;。

但是,也可以使用new关键字,将布尔值定义为对象:var x = new Boolean(false);。

在“ JS布尔值 ”一章中了解为什么不应该将布尔值创建为对象。

JavaScript菜鸟教程
JavaScript 对象
JavaScript 函数
JS HTML DOM
JS 浏览器BOM
AJAX 菜鸟教程
JavaScript 参考手册