2010-02-08 7 views
6

Basierend auf meiner Beobachtung besagt das Buch, das ich über JavaScript lese, dass es eine OOP mit JavaScript gibt? Es sagt nicht viel darüber aus, ich meine, es wurde nicht erklärt, wie man eine Klasse definiert. Kann mir jemand ein Beispielschnipsel geben?Wie definieren Sie eine OOP-Klasse in JavaScript?

Dank

+3

das Buch, das Code, warum, was, akzeptieren einige Antworten – ant

+2

@Andy E: Sechs nicht akzeptiert Fragen innerhalb einer Woche ist nicht so schlimm. – Gumbo

+0

@Gumbo: Ja, aber es beginnt als 6 in einer Woche und wächst daraus.Ich denke, es ist am besten, jemanden zu bitten, einige Antworten so früh wie möglich zu markieren :-) –

Antwort

1

folgenden Ausschnitt Sie mit JavaScript Klasse-less, instanzbasierte Objekte Einstieg helfen können:

function getArea() { 
    return (this.radius * this.radius * 3.14); 
} 

function getCircumference() { 
    var diameter = this.radius * 2; 
    var circumference = diameter * 3.14; 
    return circumference; 
} 

function Circle(radius) { 
    this.radius = radius; 
    this.getArea = getArea; 
    this.getCircumference = getCircumference; 
} 

var bigCircle = new Circle(100); 
var smallCircle = new Circle(2); 

alert(bigCircle.getArea());   // displays 31400 
alert(bigCircle.getCircumference()); // displays 618 
alert(smallCircle.getArea());   // displays 12.56 
alert(smallCircle.getCircumference()); // displays 12.56 

Beispiel aus: SitePoint - JavaScript Object-Oriented Programming

+1

Ihr Beispiel verwendet überhaupt keine prototypbasierte Vererbung. Dies ist sicherlich eine gültige Methode zur Vererbung, aber behaupten Sie nicht, dass dies eine prototypbasierte Vererbung ist. –

+0

@Keith: Aktualisiere meine Antwort: mit genauerer Terminologie ... Dennoch kann das obige Beispiel immer noch als Beispiel für eine prototypbasierte Programmierung angesehen werden: In prototypbasierten Systemen gibt es zwei Methoden, durch Klonen neue Objekte zu konstruieren eines existierenden Objekts und durch ex nihilo ("von nichts") Objekt-Erstellung. Quelle: http://en.wikipedia.org/wiki/Prototype-based_programming#Object_construction –

8

JavaScript ist Prototype based und nicht basierend Klasse.

Prototyp-basierte Programmierung ist eine Art der objektorientierten Programmierung in die Klassen nicht vorhanden sind, und Verhalten Wiederverwendung (bekannt als Erbe in klassenbasierten Sprachen) wird über einen Prozess des Klonens durchgeführt bestehende Objekte, die als Prototypen dienen. Dieses Modell kann auch als klassenlose, prototyporientierte oder instanzbasierte Programmierung bezeichnet werden. Delegierung ist die Sprachfunktion, die prototypbasierte Programmierung unterstützt.

+0

Aber Sie können immer noch Aspekte der klassenbasierten Vererbung emulieren und sich wie normale Klassen fühlen. http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html –

3

Jede Funktion in Javascript, kann verwendet werden, eine erstellen Objekt:

Beispiel:

function MyPoint(x, y) { 
    this.x = x; 
    this.y = y; 
    this.distanceTo = getDistance; 
} 

function getDistance(p) { 
    var dx = this.x-p.x; 
    var dy = this.y-p.y; 
    return Math.sqrt(dx*dx + dy*dy); 
} 

var p0 = new MyPoint(1, 2); 
var p1 = new MyPoint(2, 3); 

window.alert('The distance is ' + p0.distanceTo(p1)); 
1

In JavaScript ist alles ein Objekt. Also ist auch eine Funktion ein Objekt. Also in js (weniger als < Version 2), Funktion macht Klassen (die selbst erstklassige Objekte sind). Gehen here, here und here für das Verständnis besser

2

Hier sind paar verschiedene Möglichkeiten

if (typeof FFX == "undefined") { 
    FFX = {}; 
} 

//Static class 
FFX.Util = ({ 
    return { 
     method:function(){ 
     } 
})(); 

FFX.Util.method(); 



//Instance class 
FFX.Util2 = ({ 
    // private method 
    var methodA=function(){ 
     alert("Hello"); 
    }; 
    return { 
     method:function(){ 
     //Call private method 
     methodA(); 
     } 
}); 
var x= new FFX.Util(); 
x.method(); 

andere Art und Weise

function MyClass(){ 
} 

/* privileged functions */ 
MyClass.prototype.hello = function(){ 
    alert("Hello"); 
} 

auch Sie, wie jquery sehen konnte, Prototyp und gleich Handle-Klassen und sehen, ob das ist, passt zu dir.

2

Es gibt keine standardmäßige Möglichkeit, OOP in JavaScript auszuführen. Jeder benutzt etwas andere Klassen-/Instanz-Systeme und die meisten Bücher täuschen das Problem auf. Unter this question finden Sie eine Beschreibung der Möglichkeiten, mit OO in JS zu arbeiten, und wählen Sie Ihren Favoriten aus.

+0

danke für den Link sir^_^ – sasori

+0

+1 für Erwähnung Fudge :) – Mottie

4

Ich empfehle this book für eine kurze, präzise Erklärung sowohl, wie man JS's prototypische Vererbung verwendet, als auch, wie man klassische OO-Vererbung in JS emuliert.

JavaScript: The good parts

+0

Ja. Auf der Website von Douglas Crockford (www.crockford.com) finden Sie ebenfalls hervorragende Erklärungen. – PeterAllenWebb

+0

danke sir, ich werde dieses Zeug lesen – sasori

+0

Sie könnten die Videos finden, die er auch getan hat nützlich - hier sind ein paar. http://ajaxian.com/archives/douglas-crockford-video-advanced-javascript http://video.yahoo.com/watch/111593/1710507 –

Verwandte Themen