美文网首页
自定义构造函数创建对象

自定义构造函数创建对象

作者: 夜静听风吹雨 | 来源:发表于2018-08-17 13:16 被阅读0次
    //自定义构造函数创建对象
            //1.先自定义一个构造函数
            function Person(name,age){
                this.name = name;
                this.age = age;
                this.sayHi= function () {
                    console.log("我叫"+this.name+"我今年"+this.age)
                }
            }
            //2.然后创建对象
           var per1 = new Person("晓阳",18);
            
            console.log(per1.name); //晓阳
            console.log(per1.age);  //18
            per1.sayHi(); //我叫晓阳我今年18
            console.log(per1 instanceof Person); //true
    

    注意点:函数和自定义构造函数的区别?

    • 普通函数在调用的时候直接 functionName(); 调用就行,自定义构造函数是为了创建对象的!需要写new
    • 自定义构造函数的首字母要大写!

    自定义构造函数能不能分辨出对象到底属于什么类型?

    • "对象" instanceof "类型";
    • 判断这个对象是不是Person类型,结果为布尔类型!

    自定义构造函数实例化一个对象时,干了哪几件事

    var per1 = new Person("晓阳",18);
    这段代码在后台做了几件事情,也可以说是它的执行流程:
    1.在内存"堆"中申请了一块空间储存对象
    2.把this设置为当前对象
    3.设置对象的属性和方法的值
    4.把this返回
    

    自定义构造函数的优缺点:

      自定义构造函数它知道自己从哪里来,通过谁生产出来的,能判断出实例化对象的类型! 
      缺点:它无法数据共享.这一点可以通过原型对象解决!
    

    自定义构造函数创建对象所带来的问题:(也就是它的缺点)

    //自定义构造函数
    function Dog (name){
      this.name = name;
      this.say = function (){
        console.log("汪汪汪,我要吃狗粮")
      }
    }
    //实例化对象
    var dog1 = new Dog("金毛");
    var dog2 = new Dog("泰迪");
    
    //调用对象的方法
    dog1.say();
    dog2.say();
    console.log(dog1.say==dog2.say)//flash
    

    以上面代码为例:
    最后一行代码返回的为flash,自定义构造函数每次实例化出来的对象,构造函数都会创建一次,所以say方法在内存中创建了两次!他们在内存中的地址不同,所以不等!
    但是因为它们的逻辑和功能一样,这样就导致了代码冗余,影响性能所以这里就需要用到原型对象!

    JS原型对象>>>

    相关文章

      网友评论

          本文标题:自定义构造函数创建对象

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