写在前面
欢迎来到我的专栏,《包装类:赋予原始类型新的可能性》!在这个专栏中,我们将通过数据类型、对象、构造函数、包装类四个层面进行讲解,层层深入,希望你能坚持看下去!
目前,我们已经对数据类型与对象有所理解,接下来我们接着上节的末尾,一起来探讨一下构造函数。
构造函数
在JavaScript中,构造函数是一种特殊的函数,用于创建和初始化对象。构造函数的主要作用是定义对象的属性和方法,并且可以在创建对象时接受参数,从而灵活地初始化对象的属性值。
初始化构造函数
构造函数的命名通常以大写字母开头,以便与普通函数区分开来。这是一种约定俗成的命名规范,有助于代码的可读性。以下面的Car函数为例:
function Car(){
this.name = 'BMW'
this.height = '1400'
this.lang = '4900'
this.weight = 1000
}
这个构造函数用于创建车辆对象,具有属性 name、height、lang 和 weight。在这个构造函数中,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 是一个构造函数,它接受三个参数 name 、 age和sex,并将它们赋值给新对象的属性。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
- 创建一个新的空对象:
new关键字首先隐式创建一个新的this空对象。 - 执行构造函数代码:构造函数内部的代码
(this.xxx=xxx)在创建的this对象中被执行。 - 返回对象:将
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)
技术小白记录学习过程,有错误或不解的地方还请评论区留言,如果这篇文章对你有所帮助请 “点赞 收藏+关注” ,感谢支持!!