日期:2014-05-16  浏览次数:20331 次

创建对象的问题
function   Car(){
this.type   =   "small ";
}
var   car   =   new   Car();
alert(car.color);
Car.prototype.color   =   "red ";
alert(car.color);

是不是每创建一个实例(car)
都会新建一个对象(Car())
就是说这里的car指向的是新建的那个new   Car();
而不是原来的function   Car()
如果是这样的话
prototype是不是会给所有的Car对象添加属性或方法(包括原来的对象和由于实例化而生成的对象)

------解决方案--------------------
prototype里的成员是不会放到各个对象里的,而是在对象检索成员时,JS引擎会自动搜索其“类”(或称为构造器)的prototype属性里的成员。
------解决方案--------------------
car的type属性在添加之后跟Car的prototype的type还有没有联系的呢

=======================
function Car(){ // Car-> function (){}
}
var car = new Car(); // car-> 类“Car”的一个例
Car.prototype.type = "mm "; // Car.prototype增加一成员type,值为 "mm "
alert(car.type); // 首先查找car对象成员,不存在type,然后在其类Car的prototype里查找,此时找到,则返回,仍没找到则返回undefine.
car.type = "m "; // 在car对象中增加一成员type,值为 "m "
alert(Car.ptototype.type); // 可见并没有改变到其类的prototype成员的值
alert(car.type); // 由于在car对象中已找到type成员,故不用再查找其类的prototype属性的成员。

//关于prototype请参照设计模式的“原型模式”理解,但其实质是不一样的。