Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于向已创建的对象添加新函数的Javascript原型_Javascript - Fatal编程技术网

用于向已创建的对象添加新函数的Javascript原型

用于向已创建的对象添加新函数的Javascript原型,javascript,Javascript,我有一件像这样的东西 var vehicle = { car:function() { console.log("Vroom"); }, bus:function() { console.log("Grrr"); } }; 如何为目标车辆创建原型以向其添加更多功能? 这样我就有了另外一个名为“bike”的函数了?您可以在函数之外添加: var vehicle = { car:funct

我有一件像这样的东西

 var vehicle = {
     car:function()
     {
         console.log("Vroom");
     },
     bus:function()
     {
         console.log("Grrr");
     }
 };
如何为目标车辆创建原型以向其添加更多功能?
这样我就有了另外一个名为“bike”的函数了?

您可以在函数之外添加:

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();

您可以在函数外部添加:

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();

不知道为什么你需要一个原型来添加一个“自行车”功能,而你可以添加它,就像你用“汽车”和“公共汽车”所做的那样

更好的办法是:

 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.

这可能是一个使用原型和继承的合适例子。希望有帮助。

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

更好的办法是:

 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.
这可能是一个使用原型和继承的合适例子。希望有帮助。

当你说“我有一个像这样的对象”时,你的意思是你用对象文字以这种精确的方式创建了这个对象,还是你只是用对象文字来描述对象的样子

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

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

vehicle.constructor.prototype.bike = function () {
    console.log("bike");
};
这种方法的唯一问题是,如果
vehicle.constructor
指向
Object
,那么每个对象都将继承此函数,而不仅仅是
vehicle
对象。因此,更安全的方法可能是:

if (vehicle.constructor !== Object) {
    vehicle.constructor.prototype.bike = function () {
        console.log("bike");
    };
}
当你说“我有一个这样的对象”时,你的意思是你用一个对象文字以这种精确的方式创建了这个对象,还是你只是用对象文字来描述对象的样子

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

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

vehicle.constructor.prototype.bike = function () {
    console.log("bike");
};
这种方法的唯一问题是,如果
vehicle.constructor
指向
Object
,那么每个对象都将继承此函数,而不仅仅是
vehicle
对象。因此,更安全的方法可能是:

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

注意Javascript对象文本(这是您上面使用的)和用作
var myClass=function(){…}的Javascript类之间的区别;var myobject=new myClass()
。只有类将使用原型,您可以使用原型添加新的类成员/方法查找Javascript对象文本(这是您上面使用的)和用作
var myClass=function(){…}的Javascript类之间的差异;var myobject=new myClass()
。只有类会使用原型,您可以使用原型添加新的类成员/方法。如果我执行诸如vehicle.constructor.prototype.bike之类的操作,这会创建一个原型对象,该对象将具有单个实例吗?您不能创建原型,因为vehicle是一个变量,而不是一个函数。SrikanthManian的回答提供了一个原型版本。@RGraham是的,你可以,
vehicle.constructor
是一个函数。@basilikum True,将此添加到回答中只是为了了解更多,如果我做vehicle.constructor.prototype.bike之类的事情,这会创建一个只有一个实例的原型对象吗?您不能创建原型,因为vehicle是一个变量,而不是一个函数。SrikanthManian的答案提供了一个原型版本。@RGraham是的,你可以,
vehicle.constructor
是一个函数。@basilikum True,将此添加到了答案中