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

阅读 4.1k
2 个回答

首先你这些代码应该在浏览器的全局环境下执行,结果才是你描述的。
这个和原型链没关系吧:

  1. console.log(b)输出3,是因为你直接调用a()this.b = 3这行中thiswindow,而var b = 7也是设置window.b的值。所以调用a()将b设置为了3。
  2. 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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题