mysql 构造函数_构造函数-prototype

functionStart(uname, age) {this.uname =uname;this.age =age;this.sayhai = function() {

console.log('hi');

}

}var zjl = new Start('zjl', '41');var reol = new Start('reol', '22');

以上的构造函数中,new了zjl和reol两个对象,存在一个sayhai的方法,二者的内容一样,但由于方法为复杂数据类型,会分别开辟一个新的内存空间,白白浪费了内存,可以使用构造函数内置的属性prototype,将一些不变的方法定义在其原型对象上,达到节省内存的目的

functionStart(uname, age) {this.uname =uname;this.age =age;//this.sayhai = function () {

//console.log('hi');

//}

}//核心

Start.prototype.sayhai = function() {

console.log('hi');

}var zjl = new Start('zjl', '41');var reol = new Start('reol', '22');

zjl.sayhai();

最后的输出正常,但内存被节省了

其构造出来的对象之所以能调用prototype,是因为zjl中系统自动添加了指向prototype的原型对象的属性,__proto__

__proto__与prototype是等价的,console.log(zjl.__proto__===Star.prototype);输出为true

52eb73c2a185384bfed859b25854b2ab.png

系统会在prototype和__proto__中自动添加constructor的属性,其指向原来的构造函数即Star

输出

console.log(zjl.__proto__.constructor);

输出结果为:

0dbafa0703b38678441195c30b9c3d24.png

但是,如果这样赋值,则会自动覆盖掉系统生成的constructor

Start.prototype ={

sayhi:function() {

console.log('hi');

}

}

则输出 console.log(zjl.__proto__.constructor);会提示错误

856dbc3e5f499acd1915647d07b77f20.png

原型链:

89616caa539e46bb1b8f31e7fdbebbe4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值