在特定实例上实现方法

Implement a method on a specific instance?

本文关键字:实现 方法 实例      更新时间:2023-09-26

我有一个名为Car的javascript类,并定义了它的一个实例,一辆普锐斯。

Car  = 
function Car ()
{
     var mileage = 10;
     var maker = "Basic";
     var model = "Model";

   return {
   'sellSelf'   : function()  { return "I am a "+  model+ " from " +   maker + " with mpg "+  mileage;}    ,
   'getMileage' : function()  { return mileage; } ,
   'setMileage' : function(m) { mileage = m; }    ,
   'getMaker'   : function()  { return maker; } ,
   'setMaker'   : function(m) { maker = m; }    ,
   'getModel'   : function()  { return model; } ,
   'setModel'   : function(m) { model = m; }    
   };    
}

Prius = new Car();
Prius.setMaker('Toyota');
Prius.setModel('Prius');
Prius.setMileage(500);
alert(Prius.sellSelf());
alert(Prius.getMileage());

我希望能够重写普锐斯的sellSelf方法,像这样:

function sellPrius() { return "I'm a snooty car with "+getMileage()+ " mpg "; }

有什么建议吗,我说javascript把Car当作"抽象",Car. sellself()失败了。

谢谢你的帮助!

您可以直接为prius设置方法:

Prius.sellSelf = function() { return "I'm a snooty car with " + this.getMileage() + " mpg "; }

如果你想用JS OOP编程,请使用prototypenew前缀仅对具有修改原型的函数有意义,使用this访问变量和方法。当您使用new时,函数的返回值是,而不是返回。相反,返回类的一个实例,它等于该函数中的this变量。

原型的优点是函数是静态的,并且只定义一次。Car类的100个实例将只有一个共享的方法集。当你使用

的例子:

function Car(){
    //Optional: Default values
    this.maker = "Unknown manufacture";
    this.model = "Unknown model";
    //NO return statement
}
Car.prototype.setMaker = function(maker){this.maker = maker}
Car.prototype.setModel = function(model){this.model = model}
//Et cetera
Car.prototype.getMaker = function(){return this.maker}
Car.prototype.getModel = function(){return this.model}
//Etc
Car.prototype.sellSelf = function(){return "Model: "+this.model+"'nMaker"+this.maker}
var Prius = new Car();
Prius.setMaker("Toyota")
Prius.setModel("Prius");
//Etc
alert(Prius.sellSelf());

通过设置Car.prototype.newMethod = function(){}可以很容易地添加新方法。一个巨大的优势被证明:Car的所有实例现在都有这个方法,所以您只需要定义一次函数,而不是Prius.newMethod = ..; BMW.newMethod = ..

对于要继承的JavaScript属性/函数,您需要将它们添加到原型中,而不是添加到对象本身。下面是一个简单的例子。

Car.prototype.sellSelf = function()  { return "A";}
var prius = new Car();
prius.selfSell(); // returns A
//override
prius.sellSelf = function()  { return "B";}
prius.sellSelf(); // returns B

编辑:这是工作示例。