2010-02-08 34 views
6

Según mi observación, ¿el libro que estoy leyendo sobre JavaScript indica que hay un OOP con JavaScript? No dice mucho al respecto, quiero decir que no se explicó cómo definir una clase. ¿Alguien puede darme un fragmento de muestra?¿Cómo se define una clase OOP en JavaScript?

Gracias

+3

qué libro, que codifican, por qué, qué, aceptar algunas respuestas – ant

+2

@Andy E: Seis preguntas no aceptados dentro de una semana no es tan malo. – Gumbo

+0

@Gumbo: Sí, pero comienza como 6 en una semana y crece a partir de eso.Creo que lo mejor es pedirle a alguien que marque algunas respuestas lo antes posible :-) –

Respuesta

1

el siguiente fragmento puede ayudarle a empezar con su clase menos, objetos basados ​​en instancia de JavaScript:

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 

Ejemplo de: SitePoint - JavaScript Object-Oriented Programming

+1

Su ejemplo no usa herencia basada en prototipos. Esta es sin duda una forma válida de hacer herencia, pero no pretenden que se trata de una herencia basada en prototipos. –

+0

@Keith: actualicé mi respuesta: con una terminología más precisa ... Sin embargo, creo que lo anterior aún puede considerarse un ejemplo de programación basada en prototipos: en los sistemas basados ​​en prototipos, hay dos métodos para construir objetos nuevos, a través de la clonación de un objeto existente, y a través de la creación de objetos ex nihilo ("de nada"). Fuente: http://en.wikipedia.org/wiki/Prototype-based_programming#Object_construction –

8

JavaScript es Prototype based y no clase basada.

programación basada en prototipos es un estilo de la programación orientada a objetos en que las clases no están presentes, y reutilización comportamiento (conocido como herencia en lenguajes basados ​​en clases) se realiza a través de un proceso de clonación objetos existentes que sirven como prototipos. Este modelo también se puede conocer como programación sin clase, orientada a prototipos o basada en instancias . Delegación es la característica de lenguaje que admite programación basada en prototipos.

+0

Pero aún puede emular aspectos de la herencia basada en clases y hacer que se sienta como clases regulares. http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html –

3

Cualquier función en javascript se puede utilizar para crear una objeto:

Ejemplo:

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

En JavaScript todo es un objeto. Entonces, incluso una función es un objeto. Entonces, en js (menos que < versión 2), la función crea clases (que son objetos de primera clase). Ir here, here y here para entender mejor

2

Estas son algunas maneras diferentes par

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

Otra forma

function MyClass(){ 
} 

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

También se podía ver cómo jQuery, Prototype y el mango por igual las clases y ver si eso se adapta a tus necesidades

2

No hay una forma estándar de hacer OOP en JavaScript. Todo el mundo usa sistemas de clase/instancia ligeramente diferentes y la mayoría de los libros solucionan el problema. Consulte this question para ver las formas de trabajar con OO en JS y elija su favorito.

+0

gracias por el enlace sir^_^ – sasori

+0

+1 por mencionar fudge :) – Mottie

4

Recomiendo this book para una explicación concisa y precisa de cómo usar la herencia prototípica de JS y cómo emular la herencia clásica de OO en JS.

JavaScript: The good parts

+0

Sí. También hay excelentes explicaciones en el sitio web de Douglas Crockford (www.crockford.com). – PeterAllenWebb

+0

gracias, señor, leeré estas cosas – sasori

+0

Puede que encuentre que los videos que ha hecho también son útiles; aquí hay un par. http://ajaxian.com/archives/douglas-crockford-video-advanced-javascript http://video.yahoo.com/watch/111593/1710507 –

Cuestiones relacionadas