在前面的章节中,我们学习了如何在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())中使用的模式完全相同。
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具有以下用于本机对象的内置构造函数:
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(); //一个新函数对象。测试看看‹/›
正如你可以在上面看到,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布尔值 ”一章中了解为什么不应该将布尔值创建为对象。