“每个类都有一个原型对象,这个原型对象默认是由Object()创建的”,书上说的
那么,如果我定义了一个类A(){...},类A的原型对象是什么被创建的?
它是怎么由Object()创建的,如果说在实例A的时候创建的话那起不是有很多个原型对象啦?所以应该不是实例A的时候创建,难道在定义的时候被创建?
那么,如果我定义了一个类A(){...},类A的原型对象是什么被创建的?
它是怎么由Object()创建的,如果说在实例A的时候创建的话那起不是有很多个原型对象啦?所以应该不是实例A的时候创建,难道在定义的时候被创建?
alert(a instanceof Object);
alert(a.constructor);
可以看出函数a实际上是Object的一个实例(也可以说是一个继承,因为函数a本身又可以再次被实例化),而通过alert(a.constructor)可以发现,它的父类实际上是一个Function对象。进一步实验,alert(Function instanceof Object); //true也可以证明所有对象有源于Object再次说明,原型对象是本身就已经存在的,包括你自定义的类,你所能做的只能是实例化。在js中实例化应该是在new的时候发生的,而不是定义的时候发生的
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();
所谓的继承 是通过原型机制等方式来模拟的每个类都有一个原型对象,这个原型对象默认是由Object()创建的
上面的原型对象 指类拥有一个原型对象 和类本体没关系
也即 function a(){} a.prototype is Object 这个就是原型机制而且 a 是Function对象的实例
Function应该是JS中所有对象的根