//
// 为什么在这里 new A 失败?
//
var a = new A();
function A() {
this.init();
}
A.prototype = {
constructor: A,
init: function () {
alert('正常运行');
}
};
//
// 在这里 new A 才能成功,函数不是后声明都可以的吗?
//
var a = new A();
扫码关注w3ctech微信公众号
解析之后,这段代码相当于
var a;
function A(){}
a = new A();
// 这个时候还没有定义prototype,所以出错了。
A.prototype = {}
A.prototype = {...}
这个不是声明,而是赋值语句,构造函数先声明没问题,只是在调用this.init() 的时候,A.prototype还没有被赋值,所以init方法不存在。
不是没有定义prototype,而是没有对prototype赋值,这时候prototype是默认的。
总的来说,JavaScript的function并不存在“prototype声明”这样的东西,prototype和其他属性一样,都是支持动态赋值的,属性在赋值之前就使用了,当然不存在了
2L正解
共收到3条回复