为了账号安全,请及时绑定邮箱和手机立即绑定

js 构造函数生成实例对象的疑问

js 构造函数生成实例对象的疑问

郎朗坤 2019-03-14 14:13:49
本人js新手, 最近在学习对象的内容的时候遇到了一点小疑问, 如下:个人理解: 每次使用new命令生成实例对象以后, 所有构造函数里面的属性都会被定义在实例对象上, 也就是说任何两个实例对象上, 里面的属性都是不一样的无法共享, 但是如果那个属性不是方法, 其似乎还是'一样的', 看代码:var Cat = function() {    this.color = 'red'    this.say = function() {        console.log('miao')    }}var c1 = new Cat()var c2 = new Cat()console.log(c1.color === c2.color) // trueconsole.log(c1.say === c2.say) // false对于say这个方法是因为两个实例对象方法都是不一样, 这也是为什么要用prototype来兴义方法, 但是为什么color这个属性显示结果为true? 同样作为属性两个实例对象在生成的时候应该是不同的, 但是结果为什么是true?不是特别理解希望能有前辈给予解答, 谢谢!
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

C

var Cat = function() {

    this.color = {}; 

    this.say = function() {

        console.log('miao')

    }

}

var c1 = new Cat()

var c2 = new Cat()

P

console.log(c1.color === c2.color); 

console.log({} === {}); 

console.log(123 === 123); 

S

https://img1.sycdn.imooc.com//5c99cc7d0001200702650110.jpg

查看完整回答
反对 回复 2019-03-26
?
LEATH

TA贡献1936条经验 获得超7个赞

根据我的理解函数比较的是在内存中的指针,而基本类型仅仅比较值。


查看完整回答
反对 回复 2019-03-26
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

楼上说的没错,基本类型的比较只比个值,另外字符串在js中是常量,相同值的常量会不会只存储一份我不是特别清楚,我想说的是,如果两个变量引用了值相等的两个字符串,那这两个字符串可能确实是同一个字符串,他们占用的是同一个存储空间。

用函数来构造对象,并在构造函数里动态添加类方法,每次执行构造函数都会生成匿名函数作为类方法,所以每次new出来的对象的同名的方法其实都是占用不同内存空间的匿名函数,用==比较它们时,比较的其实是它们的地址,或者说“是否是同一个对象”。而字符串,数字这些基本类型的数据,用==比较时,比较的是它们的值,否则你要怎么判断两个数字相等?


查看完整回答
反对 回复 2019-03-26
  • 3 回答
  • 0 关注
  • 526 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号