javascript - 为什么newtoy.constructor === Gadget在控制台的结果是false?
问题描述
function Gadget(name,color){ this.name=name; this.color=color; this.whatAreYou=function(){return ’I am a ’ + this.color + ’ ’ + this.name; };}Gadget.prototype={ price:100, rating:3, getInfo:function(){return ’Rating: ’ + this.rating + ’, price: ’ + this.price; }};var newtoy=new Gadget(’webcam’,’black’);new.rating;//3newtoy.constructor === Gadget;//true
上述例子摘自《面向对象编程指南》一书
问题解答
回答1:如果代码没写错的话,那么就是false,因为你已经把Gadget的原型对象给重写了,而你重写的原型对象中没有constructor属性,可以参考一下《JavaScript高级程序设计》中第六章关于原型的介绍
回答2:楼上正解,Gadget.prototype 被重写了。因为原型对象中有个隐式的constructor,指向了构造函数本身。如下:
原型拓展,最好写成这种形式:
Test.prototype.newFn = function() { ...}
或者使用Object.assign()合并对象:
Test.prototype = Object.assign(Test.prototype, { newAttr: ’’, newFn: function() {... }})
相关文章:
1. css - 关于background-position百分比的问题?2. 运行python程序时出现“应用程序发生异常”的内存错误?3. mysql - 在不允许改动数据表的情况下,如何优化以varchar格式存储的时间的比较?4. macos - 无法source activate python275. 小白学python的问题 关于%d和%s的区别6. css3:flex排版问题7. html5 - chrome上的video控制条不同8. 问题Unknown column ’’ in ’where clause’9. github - 求助大神啊,win10 git clone error,折腾了几天都不行,以前原本好好的,突然就这样了10. android - 如何实现QQ pad 点击右侧输入框,只顶右侧的布局,左侧布局不动

网公网安备