Ankündigung

Einklappen
Keine Ankündigung bisher.

JS OOP getter/setter

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JS OOP getter/setter

    Guten Tag allerseits, ich reibe mir bei JS OOP immer wieder die Hände wund. Und nu meine Frage an euch: Ich versuche die Vererbung klassisch mit prototypes zu machen anhand dieses Beispiels

    PHP-Code:
    function Person(namevorname){
     
    this.name name;
     
    this.vorname vorname;
    }

    Person.prototype.sagHallo = function(){
      
    alert('hallo');

    Somit störe ich mich allerdings daran, dass man mittels
    PHP-Code:
    Person.name 
    auf das Attribut direkt zugreifen kann. Kennt ihr eine Möglichkeit, wie ich das Attribut sauber "private" schalten kann, damit ich nur mittels getter setter darauf zugreifen kann? Auf defineGetter bin ich schon gestoßen, allerdings ist dies veraltet und soll nicht mehr eingesetzt werden. Wie macht ihr JS-Profis das. Gruß, coolio.


  • #2
    http://javascript.crockford.com/private.html
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Danke für die Antwort, allerdings hatte ich solch eine Diskussion schon mal mit troy geführt und das Problem, wenn man mit Closures arbeitet, wie Crockford beschreibt:
      PHP-Code:
      function Constructor(...) {

          var 
      that this;
          var 
      membername value;

          function 
      membername(...) {...}


      ist, dass man somit Prototyping nicht sauber anwendet, was den Nachteil hat, dass alle Instanzen verschiedene Methoden nutzen und sich nicht eine Methode teilen.

      Kommentar


      • #4
        Wie macht ihr JS-Profis das. Gruß, coolio.
        Gar nicht. Entscheide Dich für eine Variante. Alles andere ist akademisch. JS nutzt nun mal keine Klassen und das Wesen der Prototypenvererbung ist das Objekt und seine Properties.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          TypeScript (am besten mit phpstorm)
          Standards - Best Practices - AwesomePHP - Guideline für WebApps

          Kommentar


          • #6
            Obs gleich ein anderer ECMAScript-Dialekt sein muss..

            Für die prototypische Vererbung gibt es x Bibliotheken, die dich dabei unterstützen. Backbones extend bspw, oder auch die google closure library: http://docs.closure-library.googleco...#goog.inherits

            Wenn der IE8 keine Rolle mehr spielt, lohnt sich auch ein Blick auf Object.create:

            Zitat von https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Using_%3CpropertiesObject%3E_argument_with_ Object.create
            PHP-Code:
            var Object.create(Object.prototype, {
              
            // foo is a regular "value property"
              
            foo: { writable:trueconfigurable:truevalue"hello" },
              
            // bar is a getter-and-setter (accessor) property
              
            bar: {
                
            configurablefalse,
                
            get: function() { return 10 },
                
            set: function(value) { console.log("Setting `o.bar` to"value) }
            }}); 
            S.a. Object.defineProperty. Die ECMAScript 5 features lassen sich mittlerweile fast überall einsetzen: http://kangax.github.io/compat-table/es5/

            Ab ECMA 6 kannste auch in JS Klassenstrukturen definieren (noch alles Zukunftsmusik). Dazu lässt sich das module-Pattern auflösen. Einen Überblick über die aktuelle Browserunterstützung gibts hier: http://kangax.github.io/compat-table/es6/

            Viele Grüße


            Basti
            I like cooking my family and my pets.
            Use commas. Don't be a psycho.
            Blog - CoverflowJS

            Kommentar

            Lädt...
            X