【专栏】包装类:赋予原始类型新的可能性(三)

143 阅读4分钟

写在前面

欢迎来到我的专栏,《包装类:赋予原始类型新的可能性》!在这个专栏中,我们将通过数据类型、对象、构造函数、包装类四个层面进行讲解,层层深入,希望你能坚持看下去!

目前,我们已经对数据类型与对象有所理解,接下来我们接着上节的末尾,一起来探讨一下构造函数。

构造函数

在JavaScript中,构造函数是一种特殊的函数,用于创建和初始化对象。构造函数的主要作用是定义对象的属性和方法,并且可以在创建对象时接受参数,从而灵活地初始化对象的属性值。

初始化构造函数

构造函数的命名通常以大写字母开头,以便与普通函数区分开来。这是一种约定俗成的命名规范,有助于代码的可读性。以下面的Car函数为例:

function Car(){
    this.name = 'BMW' 
    this.height = '1400' 
    this.lang = '4900' 
    this.weight = 1000 
} 

这个构造函数用于创建车辆对象,具有属性 nameheightlangweight。在这个构造函数中,this 关键字用于将属性和值绑定到新创建的对象上。

创建实例对象

let car1 = new Car() 

我们通过new关键字来创建这个构造函数来创建对象。car1 对象拥有与 Car 构造函数中定义的相同的属性和初始值。

let car1 = Car() 

在调用构造函数时,必须使用 new 关键字。忘记使用 new 关键字会导致 this 指向全局对象,而不是新创建的对象(我们暂且先把this放在一边,后面再聊)。

带参数的构造函数

function Car(color){
    this.name = 'BNW'
    this.height = '1400'
    this.width = '4900'
    this.weight = 1000
    this.color = color
}

现在我们在这个构造函数接受一个参数 color,然后用this 关键字用于将属性和传入的 color 参数绑定到新创建的对象上。

let car2 = new Car('green');

当我使用 new Car('green') 创建一个新的对象实例时,传入的 'green' 参数会被赋给新对象的 color 属性。你可以按照以下方式创建一个带有特定颜色的车辆对象:

Car { name: 'BNW', height: '1400', width: '4900', weight: 1000 color: 'green'}

那么new在创建构造函数对象的时候到底干了什么?

我们用另一个例子来理解一下:

function Person(name, age, sex){
    this.name = name;
    this.age = age;
    this.sex = sex;
}

在上面的例子中,Person 是一个构造函数,它接受三个参数 nameagesex,并将它们赋值给新对象的属性。this 关键字指向新创建的对象,这样属性就会被添加到新对象上。

let p = new Person('阳阳',18,'male')

Person { name: '阳阳', age: 18, sex: 'male' }

在JavaScript中,new 关键字用于创建一个新的对象实例。当你使用 new 关键字调用一个构造函数时,它执行了以下步骤:

let this = {
    name:name,
    age:age,
    sex:sex
}
return this
  1. 创建一个新的空对象new 关键字首先隐式创建一个新的this空对象。
  2. 执行构造函数代码:构造函数内部的代码(this.xxx=xxx)在创建的this对象中被执行。
  3. 返回对象:将this对象返回

那么我们能不能用that来模拟一下new的过程

function Person(name, age, sex){
    var that = {}//创建一个新的空对象
    that.name = name;//执行构造函数代码
    that.age = age;
    that.sex = sex;
    return that;//返回对象
}

如果上面的代码能够成功打印我们的每个实例对象,那么就可以验证我们的猜想是正确的。

let p1 = Person('阳阳',18,'girl')
let p2 = Person('羊羊',20,'boy')
console.log(p1);
console.log(p2);

{ name: '阳阳', age: 18, sex: 'girl' }

{ name: '羊羊', age: 20, sex: 'boy' }

我们分别创建了两个实例对象,并成功打印两个对象,这就印证了我们的猜想。


至此,构造函数的内容就已经告一段落,内容可能有所遗漏,但这些已经足够支撑我们下一节的学习。

我们在下一节会结合前面三节所学,进入最后一节包装类的学习,一同揭开包装类的面纱,我在下一节等你!

下一节:  【专栏】包装类:赋予原始类型新的可能性(四)(已完结)(内含面试真题)💥 - 掘金 (juejin.cn)

技术小白记录学习过程,有错误或不解的地方还请评论区留言,如果这篇文章对你有所帮助请 “点赞 收藏+关注” ,感谢支持!!