理解构造函数

作者: Mortimey_yt | 来源:发表于2021-08-10 14:03 被阅读0次

    举个通俗的例子理解一下: 有人想要造一千个金币,并且要每个金币上面刻有不同的编号,最简单的方法就是,造一个金币的模子,然后再各自刻各自的编号, 构造函数就是这个金币的模子,你每次new一下,就是造一个金币.

    构造函数和普通函数的区别:

    1.名字:构造函数首字母建议大写;普通函数首字母建议小写
    2.内容:构造函数内部可以使用this关键字;普通函数内部不建议使用this,因为这时候this指向的是window全局对象,这样无意间就会为window添加了一些全局变量或函数(关于导致this的原因会在下面介绍)

    1. 在构造函数内部,this指向的是构造出来的新对象
    2. 在普通函数内部,this指向的是window全局对象

    构造函数默认不用return返回值;普通函数一般都有return返回值

    1. 构造函数会默认返回this,也就是新的实例对象
    2. 普通函数如果没有return值的话,返回undefined
    3. 如果使用了return,那返回值会根据return值的类型而有所不同

    这里涉及到要了解的知识点有基本数据类型和引用类型的区别

    1. return的是五种简单数据类型:String,Number,Boolean,Null,Undefined的话,构造函数会忽略return的值,依然返回this对象;而普通函数会返回return后面的值
    function Person(){
        var a;
        this.name = "zqq";
        this.age = 28;
        return a;
    }
    var p = new Person();//返回this对象
    var p = Person();//因为a没初始化,所以a是undefined,而undefined属于简单数据类型,所以返回undefined,String,Number,Boolean,Null同理
    
    1. 如果return的是引用类型:Array,Date,Object,Function,RegExp,Error的话,构造函数和普通函数都会返回return后面的值
    function Person(){
        var arr = [];
        this.name = "zqq";
        this.age = 28;
        return arr;
    }
    var p = new Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理
    var p1 = Person();//返回arr空数组,Date,Object,Function,RegExp,Error同理
    

    3.调用:构造函数使用new关键字调用;普通函数不用new关键字调用。

    var p = new Person();
    var p = Person();
    当以new调用构造函数(执行var p = new Person())时,函数内部会发生以下情况:
    
    1.创建一个空对象
     var p = {}; 
     2.this变量指向对象p
     Person.call(p)  //解释了上述this指向的问题
     3.p继承了构造函数Person()的原型
     p.__proto__ = Person.prototype 
     4.执行构造函数Person()内的代码
     5.return 对象p
    

    相关文章

      网友评论

        本文标题:理解构造函数

        本文链接:https://www.haomeiwen.com/subject/lupxbltx.html