2016-07-22 5 views
0

Ich bin mir ziemlich sicher, dass ich etwas falsch mache, aber gibt es immer noch eine Möglichkeit, einen Wert entsprechend der Fenstergröße einzustellen?Gibt es eine Möglichkeit, den Wert einer Objekteigenschaft dynamisch zu ändern? JavaScript

Hier ist ein Beispielcode:

var setNewValue; 
$(window).resize(function() { 
    if($(window).width() < 768) { 
    setNewValue = "less"; 
    } else { 
    setNewValue = "more"; 
    } 
}); 

var createObject = function(property) { 
    this.property = property; 
    this.showProperty = function() { 
    document.write(this.property); 
    }; 
}; 

var example = new createObject(setNewValue); 
example.showProperty(); 

// undefined

+2

Ändern Sie die Größe des Fensters, um den Ereignishandler auszulösen? –

+0

Ja, der Wert muss entsprechend der Fenstergröße –

+5

gesetzt werden 'setNewValue' und' property' sind keine Objekte. Deshalb gibt es keine Referenz. – Bergi

Antwort

0

var createObject = function(property) { 
 
    return { 
 
    property: property, 
 
    getProperty: function() { 
 
     return this.property; 
 
    } 
 
    }; 
 
}; 
 

 
var example = createObject(); 
 

 
$(window).resize(function() { 
 
    example.property = $(window).width() < 768 ? "less" : "more"; 
 
    document.write(example.getProperty()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Aber es gibt auch undefined mit resize Funktion –

+0

@MykytaKhilai überprüfen Sie es bitte –

+0

Scheint zu arbeiten !! Vielen Dank! –

0

Sieht aus wie Sie eine Race Condition hier haben. Wenn das Skript ausgeführt wird, was passiert, ist, dass:

  1. setNewValue Variable (es Wert ist undefined im Moment) definiert ist
  2. Resize-Ereignishandler definiert ist
  3. createObject() mit aktuellen setNewValue Wert genannt wird, das ist noch undefined

Sofern es keine Grßenänderungsereignis Schritte ausgelöst zwischen 2. und 3., werden Sie immer mit setNewValue = undefined enden, wenn createObject() aufrufen.

Ich bin nicht sicher, was das große Bild hier ist, da Sie nur einen Ausschnitt Ihres Codes gepostet haben, aber Sie müssen sicherstellen, dass setNewValue Variable bereits beim Zugriff festgelegt ist - zum Beispiel durch explizites Festlegen irgendwo am Anfang des Skripts.

Verwandte Themen