我只是尝试覆盖Car类中的字段和函数。如何覆盖现有的字段和函数?
Car = function()
{
this.doors = null;
this.open = function(){alert("open it!");}
}
Car.prototype.doors = 4;
Car.prototype.open = function(){ // public method
alert("do not open!");
}
myCar = new Car();
alert(myCar.doors); //null?
答案 0 :(得分:1)
请参阅,prototype
不是允许您扩展对象的一些魔术技巧。它的唯一目的是为相应对象中找不到的属性提供值。此处,doors
和open
都是为Car
对象定义的,这就是为什么任何查找都不会达到Car.prototype
的原因。
这很容易证明:只需将这些行添加到代码
即可delete myCar.doors;
alert(myCar.doors); // 4
说明:对于delete myCar.doors
,对象的相应属性已移除。当您在下一行中查找其值时,它会上升到原型链,达到Car.prototype.doors
- 该值设置为4.
这就是为什么,顺便说一下,prototype chain
很少用于为特定类设置静态值。但它对于设置所谓的类方法非常有用,因为只会创建一个函数的单个副本并将其存储在内存中。