关于javascript的小疑问?

  function b() {
    alert(1);
}

/* 上面的不会执行 */
/* 下面的我就new了一个a,结果在浏览器中就输出数字1了 */

  function b() {
    alert(1);
}
var a = new b();

为啥第二种情况我啥都没干,就实例化了一下,浏览器就自动输出数字1呢??

阅读 2.1k
3 个回答

如果你能明白 new 操作符做了哪些事情应该就不会有疑问了:

  1. 创建一个空对象(即{}): var obj = Object.create(null)
  2. 链接该对象(即设置该对象的构造函数)到另一个对象(本函数), 这个空对象继承其原型: obj.__proto__ = f.prototype
  3. 使用指定的参数调用函数 f,new Foo 等同于 new Foo(),也就是 f 不带任何参数调用的情况; 将步骤 1 创建的对象作为 this 的上下文(将 this 绑定到新创建的对象 | f 函数中的 this 的指针替换成 obj) ,f.call(obj)
  4. 如果该函数没有显式地在函数中写 return,则返回 this。
注意看 3

在你的上上个问题里,已经有人举例说明了 new 操作符的原理,等同于回答过你这个问题了: 初学,关于javascript的问题?
把人家给的代码示例里传入的 fn 换成这里的 b 即可。
简而言之,以 new 操作符调用 b 的时候,需要执行 b,来初始化实例的属性,此时 b 称为实例的“构造函数”。

你搞错了重点,关键不是 new ,是你执行了函数b
像这样也会触发

(function(key) {
    alert(key);
})(123)

讲道理你车造好了,都没有启动它怎么会跑

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