为什么构造函数不能后声明,再调用?

 //
 // 为什么在这里 new A 失败?
 //
 var a = new A();
 function A() {
 this.init();
 }
 A.prototype = {
 constructor: A,
 init: function () {
 alert('正常运行');
 }
 };
 //
 // 在这里 new A 才能成功,函数不是后声明都可以的吗?
 //
 var a = new A();
w3ctech微信

扫码关注w3ctech微信公众号

共收到3条回复

  • 解析之后,这段代码相当于

    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正解

    回复此楼

AltStyle によって変換されたページ (->オリジナル) /