2016-05-13 13 views
7

Ho un oggetto JavaScript denominato concept:Impossibile inizializzare un oggetto in jQuery document.ready

function concept() { 
    this.ConceptId = 0; 
    this.Name = ""; 
} 

sto cercando di avviare in jQuery document.ready:

$(document).ready(function() { 
    var concept = new concept; 
}); 

Si restituisce un errore:

Uncaught TypeError: concept is not a constructor

Se sposto l'oggetto all'interno di document.ready, è di lavoro.

$(document).ready(function() { 
    function concept() { 
     this.ConceptId = 0; 
     this.Name = ""; 
    } 
    var concept = new concept; 
}); 

io sono ancora nuovo su JavaScript, per quanto ho capito document.ready viene eseguito quando DOM è completata. Non capisco perché non possa accedere all'oggetto definito dall'ambito document.ready.

Qui è il violino: https://jsfiddle.net/49rkcaud/1/

risposta

4

Il problema è perché si sta ridefinendo concept. Hai solo bisogno di cambiare il nome della variabile:

$(document).ready(function() { 
 
    var foo = new concept; // change the variable name here 
 
    alert(foo.ConceptId); // = 0 
 
}); 
 

 
function concept() { 
 
    this.ConceptId = 0; 
 
    this.Name = ""; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Penso che l'esecuzione della funzione sia anche necessaria come 'new concept()' o no? –

+1

Le parentesi sono facoltative quando si utilizza la parola chiave 'new'. –

+0

capito, apprezzato anche) –

4

Prova questo:

Jsfiddle: https://jsfiddle.net/3w284mcs/

$(document).ready(function() { 
    var concept = function() { 
     this.ConceptId = 0; 
     this.Name = ""; 
    } 

    var concept_obj = new concept(); 
    alert(concept_obj.ConceptId); 
    }); 
+0

So che questo sta funzionando, ma non voglio definire il mio oggetto concetto nello scope jquery dato che è disordinato . – londondev

3

Hai solo bisogno di cambiare variable nome in cui chiamata questa funzione

risposta

$(document).ready(function() { 
    /*function concept() { 
      this.ConceptId = 0; 
      this.Name = ""; 
      }*/ 

    var concept1 = new concept; 
    alert(concept1.ConceptId); 
    }); 

    function concept() { 
    this.ConceptId = 5; 
    this.Name = ""; 
    } 

Meglio approccio

Si dovrebbe creare l'oggetto della funzione utilizzando ()

var objConcetp = new concept(); 

Anche utilizzare constructor anziché assegnare direttamente values. La tua funzione assomiglia a:

$(document).ready(function(){ 
    var oConcept = new concept(1, "YourName"); 
}); 

function concept(conceptId, name){ 
    this.ConceptId = conceptId; 
    this.Name = name; 
} 
+1

2 risposte hanno risolto il problema con una buona spiegazione. non hai aggiunto nulla di nuovo .. –

+0

Sì, sono un po 'in ritardo per rispondere cercando di spiegare entrambe le opzioni :) –

+0

np, hai risposto correttamente, quindi upvote è tuo :) –

Problemi correlati