Javascript原型,用于向已创建的对象添加新功能

时间:2013-10-08 07:02:53

标签: javascript

我有像

这样的对象
 var vehicle = {
     car:function()
     {
         console.log("Vroom");
     },
     bus:function()
     {
         console.log("Grrr");
     }
 };

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

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

Dunno为什么你需要一个原型来添加一个'自行车'功能,当你可以添加'自行车'功能,就像你使用'汽车'和'公共汽车'一样。

更好的方法是:

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

然后你可以创建Vehicle类型的对象,它将使用'drive'方法。

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

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

答案 2 :(得分: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");
    };
}