JavaScript - 对象构造器

你好,有抱负的程序员们!今天,我们将深入探索JavaScript对象构造器的奇妙世界。作为你友好的计算机科学老师,我很兴奋能引导你们进行这次旅程。所以,戴上你的虚拟安全帽,让我们一起开始构建一些对象吧!

JavaScript - Object Constructors

对象构造器

想象你正在经营一家神奇的宠物店。你有很多不同的动物,每个动物都有自己的特征。我们难道不能为我们的动物创建一个蓝图,而不是分别编写每个动物吗?这正是JavaScript中的对象构造器所做的!

对象构造器就像是一个工厂,生产具有相似属性和方法的对象。让我们为我们的神奇宠物创建一个简单的构造器:

function MagicalPet(name, species, specialPower) {
this.name = name;
this.species = species;
this.specialPower = specialPower;
this.introduce = function() {
console.log(`嗨,我是${this.name},一只拥有${this.specialPower}能力的${this.species}!`);
};
}

现在,让我们分解一下:

  1. 我们定义了一个名为MagicalPet的函数,它有名称、种类和特殊能力作为参数。
  2. 在函数内部,我们使用this将这些参数分配为对象的属性。
  3. 我们还定义了一个名为introduce的方法,它打印出一个问候。

要创建一个新的神奇宠物,我们使用new关键字:

let fluffy = new MagicalPet("Fluffy", "龙", "喷火");
fluffy.introduce(); // 输出:嗨,我是Fluffy,一只拥有喷火能力的龙!

瞧!我们刚刚使用对象构造器创建了我们的第一个神奇宠物。这难道不令人兴奋吗?

向构造器添加属性或方法

有时,在我们创建构造器之后,我们可能会意识到我们忘记添加一个重要的属性或方法。不用担心!我们可以稍后使用原型来添加它们。

让我们向MagicalPet添加一个age属性和一个birthday方法:

MagicalPet.prototype.age = 0;
MagicalPet.prototype.birthday = function() {
this.age++;
console.log(`${this.name}现在${this.age}岁了!`);
};

现在,每个神奇宠物都会有一个年龄(从0开始),并且可以庆祝生日:

fluffy.birthday(); // 输出:Fluffy现在1岁了!
fluffy.birthday(); // 输出:Fluffy现在2岁了!

JavaScript对象原型

你可能会想,“我们刚才使用的这个'原型'是什么东西?”好吧,把它想象成所有由同一个构造器创建的对象携带的共享背包。我们放入这个背包的任何东西都对所有对象可见。

当我们向原型添加属性或方法时,我们本质上是将它们放入这个共享背包。这比直接将它们添加到每个对象中更节省内存,尤其是当我们有很多对象时。

下面是一个视觉表示:

MagicalPet构造器
|
v
原型(共享背包)
- age
- birthday()
|
v
个体MagicalPet对象
- name
- species
- specialPower
- introduce()

JavaScript内置对象构造器

JavaScript带有几个内置的对象构造器,你在编码冒险中经常会用到。让我们来看看其中的一些:

构造器 描述 示例
String() 创建字符串对象 let greeting = new String("Hello");
Number() 创建数字对象 let age = new Number(25);
Boolean() 创建布尔对象 let isAwesome = new Boolean(true);
Array() 创建数组对象 let fruits = new Array("apple", "banana", "cherry");
Object() 创建通用对象 let emptyObj = new Object();
Date() 创建日期对象 let today = new Date();

虽然这些构造器可用,但值得注意的是,对于字符串、数字和布尔值等原始类型,使用字面量更为常见且高效:

let greeting = "Hello";            // 更推荐,而不是new String("Hello")
let age = 25;                      // 更推荐,而不是new Number(25)
let isAwesome = true;              // 更推荐,而不是new Boolean(true)
let fruits = ["apple", "banana"];  // 更推荐,而不是new Array("apple", "banana")

然而,像Date()这样的构造器通常按如下方式使用:

let birthday = new Date("1990-01-01");
console.log(birthday.getFullYear()); // 输出:1990

就这样,我年轻代码巫师们!我们一起穿越了JavaScript对象构造器的领域,添加了神奇的属性和方法,探索了神秘的原型,甚至窥视了一些内置构造器。

记住,熟能生巧。尝试创建你自己的构造器,可能是不同类型的咒语或神奇生物。你越多地玩转这些概念,它们就会变得越自然。

继续编码,继续学习,最重要的是,保持乐趣!在我们的下一课之前,愿你的代码无bug,编译时间飞快!

Credits: Image by storyset