美文网首页
js-构造函数学习(1)

js-构造函数学习(1)

作者: 若沫成海 | 来源:发表于2019-04-26 15:19 被阅读0次

    原文链接:https://www.jianshu.com/p/95a5faee17f1

    什么是构造函数

    为啥要用构造函数

    1.什么是构造函数

    在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。

    2.为啥要用构造函数

    举个例子,我们要录入一年级一班中每一位同学的个人信息,那么我们可以创建一些对象,比如:

    var p1 = { name: 'zs', age: 6, gender: '男', hobby: 'basketball' };
    var p2 = { name: 'ls', age: 6, gender: '女', hobby: 'dancing' };
    var p3 = { name: 'ww', age: 6, gender: '女', hobby: 'singing' };
    var p4 = { name: 'zl', age: 6, gender: '男', hobby: 'football' };
    // ...
    

    对象的属性相同,就可以封装一个构造函数

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

    然后就可以通过new关键字调用

    var p1 = new Person('zs', '男', 'basketball');
    var p2 = new Person('ls', '女', 'dancing');
    var p3 = new Person('ww', '女', 'singing');
    var p4 = new Person('zl', '男', 'football');
    // ...
    

    在使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复的代码,而使用构造函数就可以实现代码的复用。
    注:对象字面量,就是创建对象的一种简单容易阅读的方法。如下:

    var obj = {
    a:'aaa',//a是属性,'aaa'是属性值
    b:'bbb',
    c:'ccc'
    }
    obj.a//"aaa"
    
    obj['a']//"aaa"
    

    js标准创建对象的方式要用new

    var obj=new Object()
    obj.a='aaa';
    obj.b='bbb'
    obj.c='ccc'
    
    obj.c//"ccc"
    obj['c']//"ccc"
    

    3.构造函数执行过程
    函数在创建的时候还不知道这是不是一个构造函数,在new关键字调用的时候才能确定这是一个构造函数。所以只关注new 关键字来调用的情况,按照上面的例子
    (1)每当用new调用的时候会创建一个新的内存空间,标记为Person
    (2)函数体内的this就指向该内存,因此给this添加属性就是给实例添加属性
    (3)new调用的时候创建的内存被变量p1接受,所以p1也有改内存的属性
    (4)返回值默认是this,如果手动添加一个基本数据类型的返回值,最终还是返回 this,手动添加一个复杂数据类型(对象)的返回值,最终返回该对象

    function Person2() {
      this.age = 28;
      return 50;
    }
    
    var p2 = new Person2();
    console.log(p2.age);   // 28
    
    function Person4() {
      this.gender = '男';
      return { gender: '中性' };
    }
    
    var p4 = new Person4();
    console.log(p4.gender);  // '中性'
    

    相关文章

      网友评论

          本文标题:js-构造函数学习(1)

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