www.state-it.info

Gran base de respuestas a las preguntas de los desarrolladores
Header decor

Encapsulación en Es6 no procede?

eruditecat 2016-03-10 20:42:21

Antes había declarado privados propiedades y métodos como:

function MyClass () {
  var privateProperty = 'value';
  var privateMethod = function () {
    console.log ('Hi, I am privateMethod');
  };

  this.publicMethod = function () {
    privateMethod ();
    return privateProperty;
  };
}


Y ahora estoy tan contento y comenzó a escribir Es6:

class MyClass {
  constructor () {
    // F**k yeah, я использую Es6... Как нет приватных свойств? o.O

    var privateProperty = 'value';
    var privateMethod = function () {
      console.log ('Hi, I am privateMethod');
    };

    // Нет-нет, постойте, какого ...?
  }
}


En realidad, las clases, es una sintaxis simplificada, el apoyo que no tiene valor, si quiero utilizar la encapsulación? O estoy algo perdido?

copal 2016-03-10 20:57:08

la diferencia no. Es sólo que en la primera versión de stremno hicieron y Le parecía bien.
Estás tratando de usar mal el lenguaje imitando a algún otro. Aquí no hay encapsulación, pero no es necesaria, ya que si este es el correcto y sabe una palabra de la olp, deben recordar que la programación se necesita en el имплементациях, que a su vez no admiten la cercanía, como tal. Aquí y js de la misma manera, todo lo que haces, es la aplicación de.


Total answers: 1

Fesor 2016-03-10 20:56:12

Antes había declarado privados propiedades y métodos como:


Antes torcida creaban objetos y usted se originaba la curva de la implementación del modelo de "módulo". Sí, y "propiedades y métodos de los" vuestros privados de ellos como si no completamente propiedades y métodos, es simplemente variables (propiedades estáticas en términos de java) y de la función.

O estoy algo perdido?

La encapsulación en javascript se logra y se ha logrado anteriormente por cuenta de los módulos y de la ocultación de las variables en el secundario скоупе.

let privateStaticVar = 'foo';

// то что экспортируется - то публичное
export default class MyClass() {
    constructor() {
    }
}

// или

export default (function () {
    let foo = 'foo';

    return class FooBar {
         constructor() {
         }
    };
}());


Bueno y en es2015, combinando los símbolos como una simple opción de hacer estas variables privadas, y bien, y aún hay weakmap.

const privateFoo = Symbol('foo');

export default FooBar {
    constructor(foo) {
       this[privateFoo] = foo;
    }
}

copal 2016-03-10 21:19:11

sin embargo, es posible obtener todas las claves de caracteres... ¿Y las variables locales de diseño, se puede llamar estáticos de java?


eruditecat 2016-03-10 21:20:43

Era joven y tonto. Gracias.


Fesor 2016-03-10 22:14:04

copal: dentro del constructor - sí, pero hay matices, porque no nos identificamos con los métodos en el prototipo de un objeto. Es decir, que de forma dinámica en cada instancia creamos una función y se asigna atributos de инстанса. La herencia de estos objetos ya no funciona por ejemplo (aunque eso no es un problema))

Y si es así hacer fuera del diseñador y hacer objetos correctamente - entonces tenemos un problema con инстансами.

Que antes de las claves de caracteres - bueno, pues nosotros a través de la reexión y en java y en cualquier otro idioma, podemos llamar a los métodos privados. Bueno y de nuevo hay weakmap que se puede almacenar en скоупе módulo y no mas que decir.


copal 2016-03-11 00:00:31

Fesor: porque tuve un problema similar, lo mejor de la junta serán desear más rápido que aceptar lo que la cercanía en el js no. Incluso en el ts escribir privat, ya stremno, así como de la convención obligan a declarar propiedades con _подчеркивания, y esto sólo confunde y no se ve muy bien. Por eso yo solamente si escribo, protected, para externamente en el código compilado no causaba malestar, y en el ide no se lucían en los compuestos de los objetos.
Y en general a escribir las propiedades privadas es sólo si разрабатываешь juegos y tratas de impedir que chiteram que los bytes si se desea se larga y copiarán lo que necesitan, en realidad, sólo las pruebas pueden interferir. Sí y correctamente el código, incluso no hay disponibilidad de cercanía, en este me convenzo más y más. Así mismo había exactamente a las preguntas que le hizo.


Fesor 2016-03-11 02:49:36

copal:

1) testarudez hay

const state = new WeakMap();

function privateStuff(ctx) {
    const bar = state.get(ctx).bar;

    // ... do something
    return changedBar;
}

export default class Foo {
    constructor(foo, bar) {
         state.set(this, {foo, bar});
    }

    get foo() {
         return state.get(this).foo;
    }
}


Todos honestamente, nadie puede tener acceso al estado de un objeto. De ningn modo. Ni рефлексиями, ni de alguna otra manera. Sólo si el objeto que desee. Puede que no muy bien o bien, pero es mucho más confiable que los modificadores de acceso. Se le visualiza como muy bien y sólo se puede llamar a cualquier método privado de cualquier objeto, por ejemplo en PHP sin la autorización expresa de la utilización de рефлексий?

Yo en este sentido me gusta más la filosofía de Python - todos somos adultos, si usted está utilizando su código de privados propiedades - bueno, usted mismo mal pinocho. Estamos en la próxima versión de su выпилим por ejemplo, y usted va a estar triste.

Que hasta "los juguetes читеров, etc.", saben que el private/protected no afecta la manera en que en la memoria se colocan las direcciones de los métodos y las propiedades de los objetos? Bueno, es decir, como si fuera usted de que no ocultaban, sin обфускации encontrar y cambiar algo en la memoria, en general los problemas no es. Y con обфускацией, etc. simplemente se hace relativamente difícil hacerlo. Con JS tenemos, en principio, no hay ninguna posibilidad de que algo almacenar de forma segura. Queremos un "hack" de todos y de todas, simplemente sobreescribir el weakmap la misma.


Preguntas relacionadas:

Footer decor

© www.state-it.info | Base of answers to questions for developers and programmers.