function b() {
alert(1);
}
/* 上面的不会执行 */
/* 下面的我就new了一个a,结果在浏览器中就输出数字1了 */
function b() {
alert(1);
}
var a = new b();
为啥第二种情况我啥都没干,就实例化了一下,浏览器就自动输出数字1呢??
function b() {
alert(1);
}
/* 上面的不会执行 */
/* 下面的我就new了一个a,结果在浏览器中就输出数字1了 */
function b() {
alert(1);
}
var a = new b();
为啥第二种情况我啥都没干,就实例化了一下,浏览器就自动输出数字1呢??
在你的上上个问题里,已经有人举例说明了 new
操作符的原理,等同于回答过你这个问题了: 初学,关于javascript的问题?。
把人家给的代码示例里传入的 fn
换成这里的 b
即可。
简而言之,以 new
操作符调用 b
的时候,需要执行 b
,来初始化实例的属性,此时 b
称为实例的“构造函数”。
你搞错了重点,关键不是 new ,是你执行了函数b
像这样也会触发
(function(key) {
alert(key);
})(123)
讲道理你车造好了,都没有启动它怎么会跑
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
如果你能明白 new 操作符做了哪些事情应该就不会有疑问了:
var obj = Object.create(null)
。obj.__proto__ = f.prototype
。new Foo
等同于new Foo()
,也就是 f 不带任何参数调用的情况; 将步骤 1 创建的对象作为 this 的上下文(将 this 绑定到新创建的对象 | f 函数中的 this 的指针替换成 obj) ,f.call(obj)
。