构造函数
当new一个构造函数的时候,程序会在构造函数中隐式的创建一个名为this的空对象,然后执行函数体里的代码,最后再把这个this对象作为返回值抛出去。所以当我们创建一个构造函数,需要通过this.的形式,给我们要抛出去的对象添加属性或方法。
function Student(name,age){
//var this = {};
this.name = name;
this.age = age;
this.grade = 2023;
//return this;
}
var student = new Student('lee',19);
包装类
要知道,原始值(numbe、string、boolean、null、undefined)不可以有属性或方法,只有对象可以。
但是当我们调用字符串的方法,比如'abc'.length,系统仍然可以为我们计算出‘abc'的长度。
这是因为'abc'经历了包装类的过程。
⬇️⬇️⬇️
var num = 2
num.len = 3 //给原始值num添加属性len
//隐式的 new Num(2).len = 3; 再delete该属性
//
//new Num(2).len
console.log(num.len) //undefined 并不会报错
如上,我们在给原始值添加属性或方法并不会报错,是因为系统会隐式的new一个原始值对应的构造函数并给该构造出来的对象添加属性或方法,随后立即delete。
同理,我们尝试调用原始值的属性或方法,也会进行包装类,实际上调用的是构造出来的对象的属性或方法。(undefined和null没有包装类)
一些系统自带的构造函数⬇️
Number(123)
String('abc')
Boolean('true')