En la sociedad, al evaluar la capacidad y el valor de una persona, a menudo existen dos criterios diferentes: uno "se basa en las relaciones" y el otro "se basa en la capacidad". Ambos estándares están plasmados en diferentes culturas, industrias y valores personales, cada uno con sus propios partidarios y detractores.
Dentro de los lenguajes de programación, existen dos tipos de estándares que organizan el código de diferentes maneras, vinculando estructuras de datos con funciones. Este artículo discutirá brevemente la aplicación y el principio de acción de estos dos estándares comunes.
En el lenguaje Javascript, se proporciona la palabra clave class, que podemos usar para definir clases. Es importante destacar que las clases son extensibles y, cuando se invocan métodos en una instancia, buscan definiciones de métodos en el orden de la cadena del prototipo. Por ejemplo:
class Animal { move() { return 'move' } } class Monkey extends Animal { jump() { return 'jump' } } class Human extends Monkey { write() { return 'write' } }
extends Las palabras clave pueden ayudarnos a definir una nueva clase que se extienda desde otras clases. Podemos obtener la cadena prototipo así:
let me = new Human() let proto = me.__proto__ let r = [] while (proto !== null) { r.push(proto.constructor.name) proto = proto.__proto__ }
Obtendremos r así: ['Humano', 'Mono', 'Animal', 'Objeto']. Cuando llamamos a un método, el éxito de la llamada al método depende de si existe una definición correspondiente en la cadena del prototipo. Por ejemplo, si llamas a me.move(), tiene una definición en la clase Animal y la llamada se realiza correctamente.
Este es el modelo de clase, al que me gusta llamar modelo "relacional", que se puede llamar siempre que esté definido en la clase de la instancia misma, o en la clase padre, clase abuelo, etc. en.
En comparación con el modelo basado en relaciones, el modelo basado en competencias es mucho más simple. Siempre que una instancia satisfaga un determinado rasgo, el método correspondiente puede actuar sobre la instancia independientemente de la relación de la instancia.
let me = { moveable: true, freezable: false } function move(x) { return x.moveable ? 'move' : undefined } function freeze(x) { return x.freezable ? 'freeze' : undefined }
En este modelo, los datos y los métodos son independientes entre sí. La ventaja es que es conciso y directo, pero la desventaja es obvia: debido a la independencia del método y los datos, es difícil anular la definición del método.
Después de presentar las dos formas de conectar estructuras de datos y métodos, podemos pensar que cuando sea necesario implementar métodos con diferentes funciones del mismo nombre según la clase de los datos, se recomienda utilizar el modelo de clases relacionales. . Cuando el método suele ser relativamente fijo, los datos son modificables y el mismo método funciona con datos diferentes, se puede utilizar el modelo basado en competencias.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3