“每个类都有一个原型对象,这个原型对象默认是由Object()创建的”,书上说的
那么,如果我定义了一个类A(){...},类A的原型对象是什么被创建的?
它是怎么由Object()创建的,如果说在实例A的时候创建的话那起不是有很多个原型对象啦?所以应该不是实例A的时候创建,难道在定义的时候被创建?

解决方案 »

  1.   

    原型对象不是被创建的,而是本来就有的在js中,所有对象的原型(指最底层的)都是Object()function a() {}
    alert(a instanceof Object);
    alert(a.constructor);
    可以看出函数a实际上是Object的一个实例(也可以说是一个继承,因为函数a本身又可以再次被实例化),而通过alert(a.constructor)可以发现,它的父类实际上是一个Function对象。进一步实验,alert(Function instanceof Object);  //true也可以证明所有对象有源于Object再次说明,原型对象是本身就已经存在的,包括你自定义的类,你所能做的只能是实例化。在js中实例化应该是在new的时候发生的,而不是定义的时候发生的
      

  2.   

    所有的对象都是由Object创建的,这点和java说法完全一致
    function A() {},可以看成一个类名为A的类
    类本身也是对象
    这点java里也有相似的东西。就是Class类
    动态加载类
    public class Cat{}
    Class clazz = Class.forName("user.Cat");
    而原型可以看成是存放属性和方法的模板对象。(所以一个类只有一个原型,属性和方法如果是加在原型上的,那么new的时候,就可以不用动态加在某个特定的对象上了)
    也就是说,javascript的 function + prototype = java的Class
    javascript:
    function A() {}
    java
    public class A{}得到类
    javascript:
    new A().constructor;java:
    new A().getClass();
      

  3.   

    function a() {}你写这句话的时候,a.prototype就有了
      

  4.   

    好象JS没有继承机制
    所谓的继承 是通过原型机制等方式来模拟的每个类都有一个原型对象,这个原型对象默认是由Object()创建的
    上面的原型对象 指类拥有一个原型对象 和类本体没关系 
    也即 function a(){}    a.prototype is Object  这个就是原型机制而且 a 是Function对象的实例 
    Function应该是JS中所有对象的根