JavaScript - 对象构造器
你好,有抱负的程序员们!今天,我们将深入探索JavaScript对象构造器的奇妙世界。作为你友好的计算机科学老师,我很兴奋能引导你们进行这次旅程。所以,戴上你的虚拟安全帽,让我们一起开始构建一些对象吧!
对象构造器
想象你正在经营一家神奇的宠物店。你有很多不同的动物,每个动物都有自己的特征。我们难道不能为我们的动物创建一个蓝图,而不是分别编写每个动物吗?这正是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}!`);
};
}
现在,让我们分解一下:
- 我们定义了一个名为
MagicalPet
的函数,它有名称、种类和特殊能力作为参数。 - 在函数内部,我们使用
this
将这些参数分配为对象的属性。 - 我们还定义了一个名为
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