1)属性先查自身,没有再查构造函数的原型。2)在全局下声明的变量,有var声明的不可以被delete删除,无var声明的可以被delete删除。
以下代码执行后,a.x 和 b.x 的结果分别为()
A
2, 3
B
2, 1
C
2, undefined
D
其他几项都不对
正确答案:C
对象a自身具有属性x,属性值为2,同时其原型对象上也有属性x,属性值为1;
对象b在初始化时,也是自身具有属性x,属性值为3,同时其原型对象为函数A的实例,同样具有属性x,由于没有传参,其属性x的值为undefined。
当使用delete b.x时,对象b自身的x属性被删除,但是其原型对象上的x属性不会被删除。
另外,根据对象属性查找的作用域链规则,访问对象属性时,会先查找对象自身的属性,如果不存在,才会继续在其原型对象上进行查找,故a.x的返回结果为2,b.x的返回结果为undefined,C选项正确。
b的prototype=new A,想错的可能都认为构造函数的x没有赋值就自动去原型下找,错了,
如果构造函数没有x才会去原型下找,
如果有x但是没有赋值,则是undefined,相当于x=undefined.就不会进入原型链了
JS的每一个function都有一个prototype属性 ,该属性指向一个普通的Object。
由这个function new出来的每一个实例都会带上一个__proto__的指针,指向prototype指向的那个Object。
当把类的方法放到function的prototype里的时候,该prototype对象就会添加一个新的属性,那么每个实例都会获得该类的方法。
这就是基本的封装。即类的属性在构造方法里定义,类的方法在prototype里添加。
那为什么在原型上添加的方***被类的对象引用呢?
因为JS首先在该对象上查找方法,如没有则会去原型上查找。直到查找到Object跟类。
__EOF__

本文链接:https://www.cnblogs.com/longmo666/p/17835135.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)