覆盖公共字段javascript原型

时间:2014-03-31 10:29:16

标签: javascript

我只是尝试覆盖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?

1 个答案:

答案 0 :(得分:1)

请参阅,prototype不是允许您扩展对象的一些魔术技巧。它的唯一目的是为相应对象中找不到的属性提供值。此处,doorsopen都是为Car对象定义的,这就是为什么任何查找都不会达到Car.prototype的原因。

这很容易证明:只需将这些行添加到代码

即可
delete myCar.doors;
alert(myCar.doors); // 4

说明:对于delete myCar.doors,对象的相应属性已移除。当您在下一行中查找其值时,它会上升到原型链,达到Car.prototype.doors - 该值设置为4.

这就是为什么,顺便说一下,prototype chain很少用于为特定类设置静态值。但它对于设置所谓的类方法非常有用,因为只会创建一个函数的单个副本并将其存储在内存中。