2011-09-27 5 views
2

그래서 저는 Car라는 javascript 클래스를 가지고 있으며, 그 인스턴스 인 Prius를 정의했습니다.특정 인스턴스에 대해 메소드를 구현 하시겠습니까?

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 메소드를 오버라이드 (override) 할 수 있도록하고 싶습니다

:

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

어떤 제안, 오른쪽 자바 스크립트 '로 자동차를 취급하고 말하는 내가 오전 추상 ', Car.sellSelf() 실패합니다.

도움 주셔서 감사합니다.

+4

사실 JavaScript가 아닙니다. 자세한 내용은'javascript prototype'을위한 Google. –

+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 개의 인스턴스에는 하나의 공유 된 메소드 집합 만 있습니다. 당신이

예 사용하는 경우 : 새로운 방법을 추가

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입니다.

관련 문제