在前面的章节中,我们学习了如何在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(){};