JavaScript构造函数

构造函数创建对象

function CreatePerson(name,age,sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sayHello = function(){
            console.log(`我叫${this.name},今年${this.age}岁,性别${this.sex}`);
        }
    }
    var p1 = new CreatePerson("小菲",18,"女");
    var p2 = new CreatePerson("小菲",18,"女");

    console.log(p1);           //我叫小菲,今年18岁,性别女
    console.log(p2);		  //我叫小菲,今年18岁,性别女

    console.log(p1 == p2);     //结果是:false

从上图可知,构造函数的创建方法一致,输入的个人资料也一致的情况下,结果两者并不相等;存在问题:原因在于对象互不相等,而且这种构造函数被多次new时,如果函数内部通过this设定了方法,那么多次new之后,会在内存中产生多个相同的功能,非常浪费内存,产生太多的多余方法,没有必要,为了节省资源,需要将这多个多余功能,修正,以节省内存。

解决方法

function CreatePerson(name,age,sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
        
    }

    CreatePerson.prototype.sayHello = function(){
        console.log(`我叫${this.name},今年${this.age}岁,性别${this.sex}`);
    };

    var p1 = new CreatePerson();
    var p2 = new CreatePerson();
    console.log(p1.sayHello == p2.sayHello);  //结果是:true

prototype:专属于函数的一个属性,类型为对象,叫原型对象。
作用:为了给将来自身所在的构造函数被new出来的实例做父级使用的.
proto:专属于对象数据的一个属性,类型为对象,叫隐式原型。
作用:找父级,在这里就是寻找CreatePerson.prototype,找到父级添加的方法并使用,即不存在每次new的时候产生多个相同功能,因为这都是儿子们找父亲借的功能,所以儿子们用的功能都是同一个的功能。
特性:
1、当某个对象自身不具有某个属性或方法时,会找父级
2、当这个对象是被new出来的实例时,这个对象的父级(proto)就是当前被new的这个构造函数的prototype
意味着:通过构造函数找到prototype,添加的属性或方法,在将来new出来的实例的父级身上都可以找到。

总结

在使用构造函数方式创建对象时:
1、将 将来的属性,写在构造函数内部,通过this绑定给将来的实例 ;
2、将 将来的方法,写在构造函数的原型(prototype)上,会自动被将来的实例获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值