构造函数、包装类(Boxing)

164 阅读1分钟

构造函数

当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')