js原型链的一道题

发布于 2022-09-11 23:33:58 字数 161 浏览 35 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

残龙傲雪 2022-09-18 23:33:58

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

  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中,没有涉及到原型。
瞄了个咪的 2022-09-18 23:33:58

1.a的this指向window,所以this.b为全局变量,var b = 7被函数a所定义的b覆盖。
2.new a()返回一个对象{b:3},不熟悉这点的话可以去看看构造函数,所以c.b = 3

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文