0

我有一个像

 var vehicle = {
     car:function()
     {
         console.log("Vroom");
     },
     bus:function()
     {
         console.log("Grrr");
     }
 };

如何为对象车辆创建原型以添加更多功能?这样我还有 1 个称为“自行车”的功能?

4

3 回答 3

3

您可以在函数之外添加:

var vehicle = {
     car:function()
     {
         console.log("Vroom");
     },
     bus:function()
     {
         console.log("Grrr");
     }
 };
vehicle.bike = function() {
    console.log("bike");  
};
vehicle.bike();

或使用原型:

vehicle.constructor.prototype.bike = function() {
    console.log("bike");
};
vehicle.bike();
于 2013-10-08T07:06:29.893 回答
2

不知道为什么你需要一个原型来添加一个“自行车”功能,因为你可以像添加“汽车”和“公共汽车”一样添加它。

更好的方法是:

 function Vehicle() {};
 Vehicle.prototype.drive = function() { //do something here};

然后,您可以创建 Vehicle 类型的对象,该对象将具有“驱动”方法。

 var Car = new Vehicle();
 Car.drive();       //able to execute method added to Vehicle Prototype.

这可能是使用原型和继承的适当示例。希望能帮助到你。

于 2013-10-08T07:15:50.247 回答
1

当你说“我有一个像这样的对象”时,你的意思是你以这种确切的方式创建那个对象,通过使用对象文字,还是你只是使用对象文字来描述对象的外观?

在第一种情况下,您可以只使用 RGraham 或 SrikanthManian 的解决方案。

在第二种情况下,假设您有一个对象(即来自第三方库),您不知道它是如何创建的,实际上您可以操纵其构造函数的原型,以使新函数可用于所有vehicle实例:

vehicle.constructor.prototype.bike = function () {
    console.log("bike");
};

这种方法的唯一问题是,如果vehicle.constructor指向Object,那么每个对象都将继承这个函数,而不仅仅是vehicle对象。所以更安全的方法可能是:

if (vehicle.constructor !== Object) {
    vehicle.constructor.prototype.bike = function () {
        console.log("bike");
    };
}
于 2013-10-08T08:04:58.217 回答