2016-05-13 9 views
7

Mam javascript obiekt o nazwie concept:Can not init, obiekt w jQuery document.ready

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

próbuję zainicjować go w jQuery document.ready:

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

Zwraca błąd:

Uncaught TypeError: concept is not a constructor

Jeśli przesuniemy obiekt wewnątrz document.ready, działa.

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

Nadal jestem nowy w javascript, o ile zrozumiałem document.ready jest uruchamiany po zakończeniu DOM. Nie rozumiem, dlaczego nie może uzyskać dostępu do obiektu, który jest określony z zakresu document.ready.

Tutaj jest to skrzypce: https://jsfiddle.net/49rkcaud/1/

Odpowiedz

4

Problem jest, bo jesteś przedefiniowanie concept. Trzeba tylko zmienić nazwę zmiennej:

$(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

Wydaje mi się, że wykonanie funkcji jest również niezbędne, jak "nowa koncepcja()" czy nie? –

+1

Nawiasy są opcjonalne w przypadku użycia słowa kluczowego "new". –

+0

mam to, docenione również) –

4

Spróbuj tego:

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

Wiem, że to działa, ale nie chcę definiować mojego obiektu koncepcyjnego w zakresie jquery, ponieważ jest niechlujny . – londondev

3

wystarczy zmienić variable nazwę gdzie wezwanie ta funkcja.

Odpowiedź

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

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

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

lepsze podejście

Należy utworzyć obiekt za pomocą funkcji ()

var objConcetp = new concept(); 

Również użyć constructor zamiast bezpośrednio przypisanie values. Twoja funkcja wygląda następująco:

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

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

2 odpowiedzi rozwiązały problem z dobrym wyjaśnieniem. nie dodałeś nic nowego .. –

+0

Tak, jestem trochę spóźniony, aby odpowiedzieć, próbując wyjaśnić obie opcje :) –

+0

np. Odpowiedziałeś poprawnie, więc upvote jest twoje :) –

Powiązane problemy