js原型链的一道题
var a = function (){this.b =3;}
var c = new a();
a.prototype.b = 9;
var b = 7;
a();
console.log(b)
console.log(c.b)
为什么输出的是 3 3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先你这些代码应该在浏览器的全局环境下执行,结果才是你描述的。
这个和原型链没关系吧:
console.log(b)
输出3,是因为你直接调用a()
,this.b = 3
这行中this
为window
,而var b = 7
也是设置window.b
的值。所以调用a()
将b设置为了3。var c = new a()
这句就是普通的构造函数,c对象有个属性b
等于3。b
直接在对象c中,没有涉及到原型。1.a的this指向window,所以this.b为全局变量,var b = 7被函数a所定义的b覆盖。
2.new a()返回一个对象{b:3},不熟悉这点的话可以去看看构造函数,所以c.b = 3