Ankündigung

Einklappen
Keine Ankündigung bisher.

Eine Funktion aus anderer Funktion in selber Klasse aufrufen

Einklappen

Neue Werbung 2019

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

  • Eine Funktion aus anderer Funktion in selber Klasse aufrufen

    Hallo ich möchte eine Funktion aus einer anderen Funktion aufrufen alle in einer Klasse.

    mit this.funktionsname funktioniert dass nicht.




    Code:
     safed: function () {
    
           
           console.log(send)
        },
        dragable: function () {
    
            var string = "";
            console.log(string);
           draggable($('.draggable'), {
                containment: ".ui-grid-solo",
                drag: function (e) {
     
                },
                stop: function (e) { console.log("test");
                
                    this.safed();
                   
                }
            });
    
        }
    Ich möchte in stop this.safed aufrufen erhalte aber diese Fehlermeldung:

    wrapped function failed : TypeError: this.safed is not a function.

    Beide funktionen befinden sich in der selben Klasse.


  • #2
    Code:
    var that = {
        safed: function () {
           console.log(send)
        },
        dragable: function () {
            var string = "";
            console.log(string);
            draggable($('.draggable'), {
                containment: ".ui-grid-solo",
                drag: function (e) {
                },
                stop: function (e) {
                    console.log("test");
                    that.safed();
                }
            });
        }
    };

    Kommentar


    • #3
      Das funktioniert fast. Dass Problem damit erzeuge ich ein neues Objekt. Ich benötige aber das selbe.
      Code:
      var Box = { safed: function () { console.log(send) }, dragable: function () { var string = ""; console.log(string); draggable($('.draggable'), { containment: ".ui-grid-solo", drag: function (e) { }, stop: function (e) { console.log("test"); Box.safed(); } }); } };

      Kommentar


      • #4
        Box ist doch ein Objekt.

        Kommentar


        • #5
          Ja aber ein neues also eine neue Box. Ich will aber von der Box von der ich safed aufgerufen habe in die funktion safed rein. (normalerweise mit this) in anderen sprachen.

          Kommentar


          • #6
            Es ist ein und das selbe Objekt. Keine Ahnung, was du meinst. Und eine Klasse sieht man weit und breit nicht.

            Kommentar


            • #7
              Ich übergebe:
              Code:
              this.posX = (e.el.style.left);
                              this.posY = (e.el.style.top);
                              Box.safed();
                             console.log(this.posX);
              posx und posy haben wenn ich Box.safed aufrufe wieder die ausgangs Werte.

              Dabei habe ich sie zuvor befüllt.

              Kommentar


              • #8
                Logisch, this hat mit Box überhaupt nichts zu tun.

                Kommentar


                • #9
                  Okay hier der komplette Code:

                  Code:
                  var Box = {
                   posX: 0,
                      posY: 0,
                    dragable: function () {
                  
                          var string = "";
                          console.log(string);
                          jsPlumb.draggable($('.draggable'), {
                              containment: ".ui-grid-solo",
                              drag: function (e) {
                                  // console.log(e.el.style.left);
                  
                              },
                              stop: function (e) { console.log("test");
                                  this.posX = (e.el.style.left);
                                  this.posY = (e.el.style.top);
                                  Box.safed();
                                 console.log(this.posX);
                              }
                          });
                  
                      },
                      safed: function () {
                  
                  
                          safe.posX = this.posX;
                          safe.posY = this.posY;
                  
                         var send = JSON.stringify(safe);
                        
                         console.log(send);
                      }
                  }

                  Kommentar


                  • #10
                    Code:
                    Box.posX = e.el.style.left;

                    Kommentar


                    • #11
                      ich bin nicht soo fit in JS, aber ist "this"

                      - innerhalb der funktion "dragable"
                      - wiederum innerhalb der funktion "jsPlumb.draggable"
                      - wiederum innerhalb der funktion "stop"

                      wirklich noch "Box" oder muss das nicht übergeben werden ?
                      hardcore will never die

                      Kommentar


                      • #12
                        ist "this"...wirklich noch "Box"
                        Ich denke, das ist genau das Problem. this bezieht sich auf die jeweiligen Objekte der Selektion
                        Code:
                          
                         $('.draggable')
                        Du müsstest eine Variable in Box unterbringen, die sich auf Box selber bezieht.

                        Code:
                        var that = this;
                        und weiter unten dann

                        Code:
                        that.safed();
                        Wie das bei Deinem Konstrukt konkret umzusetzen ist, müsste ich jetzt auch erst mal ausprobieren. Aber es gibt ja hier genug Gurus, die das aus de Ärmel schütteln.

                        Hier mal eine Codeskizze wie ich das sonst immer löse:

                        Code:
                        function test() {
                            var that = this;
                            this.selection = $('input[type="button"]');
                            
                            this.doSomething = function () {
                                //do something
                            }
                            
                            this.buttonsInit = function () {
                                this.selection.bind('click',function () {
                                   that.doSomething(); 
                                }):
                            }
                            
                            this.buttonsInit();
                            
                        }
                        [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                        Kommentar


                        • #13
                          Oder in ECMAScript 6:

                          Code:
                          class Test {
                              constructor() {
                                  this.selection = $('input[type="button"]');
                                  this.buttonsInit();
                              }
                              
                              doSomething() {
                                  //do something
                              }
                              
                              buttonsInit() {
                                  this.selection.bind('click', () => {
                                      this.doSomething();
                                  }):        
                              }
                          }
                          (ungetestet)

                          Kommentar


                          • #14
                            @hellbringer: Cool. Danke für den Hinweis. Da habe ich mal wieder die Entwicklung verschlafen...

                            Ein constructor wird gern genommen und die Notation des Funktionsobjekts sieht auch nicht schlecht aus.

                            Habe mal flugs nach Browsersupport für ECMAScript 6 geschaut. Das Beste, was ich gefunden habe ist dies hier: https://kangax.github.io/compat-table/es6/


                            Allerdings steht da zwar was von Destruktoren aber die Konstruktoren fehlen irgendwie. Hast Du da evtl. noch einen besseren Link?
                            [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                            Kommentar


                            • #15
                              Zitat von drsoong Beitrag anzeigen
                              Hast Du da evtl. noch einen besseren Link?
                              Nein, ich müsst selber googeln.

                              Üblicherweise programmiere ich in TypeScript, das übersetzt den Code automatisch in ECMAScript 5, wodurch die Browserkompatibilität gewährleistet ist.

                              Kommentar

                              Lädt...
                              X