2011-09-27 7 views
2

私は車と呼ばれるこの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.sellSelf()は失敗します。

ありがとうございました!

+4

JavaScript OOPとは異なります。詳細については、Googleの 'javascript prototype'を参照してください。 –

+0

JavaScriptでOOPを使いたいなら、* Prototype *や* Base *と同じ 'lib'を使うのがよいでしょう。 – user278064

+0

javascriptには「クラス」自体はなく、オブジェクトを返す関数(クラスのように)かもしれません。あなたは間違いなくJS継承をプロトタイプから調べる必要があります。 – tjarratt

答えて

5

あなただけのpriusするための方法を設定することができます:あなたはJS OOPでプログラムしたい場合は、prototypeを使用

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

newという接頭辞は、修正されたプロトタイプを持つ関数にのみ意味があり、thisを使用して変数とメソッドにアクセスします。 newを使用すると、関数の戻り値はではなく、が返されます。代わりに、その関数内の変数thisに等しいクラスのインスタンスが返されます。

プロトタイプの利点は、関数が静的で一度しか定義されないことです。 Carクラスの100インスタンスには、1つの共有メソッドセットしかありません。あなたは

例を使用する場合:新しいメソッドを追加する

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 = ..ではなく関数を一度定義するだけで済みます。

0

継承する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 

編集:ここで動作しますsampleです。

関連する問題