2016-05-13 2 views
7

У меня есть Java-объект с именем concept:Не удается инициализировать объект в JQuery document.ready

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

Я пытаюсь запустить его в JQuery document.ready:

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

возвращает ошибку:

Uncaught TypeError: concept is not a constructor

Если я перемещаю объект внутри document.ready, это за работой.

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

Я еще новичок в JavaScript, насколько я понял, document.ready запускается, когда DOM будет завершена. Я не понимаю, почему он не может получить доступ к объекту, который определен из области document.ready.

Здесь скрипка: https://jsfiddle.net/49rkcaud/1/

ответ

4

Проблема в том, что вы переопределение concept. Вам просто нужно изменить имя переменной:

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

Я думаю, что выполнение функции также необходимо как 'new concept()' или нет? –

+1

Скобки необязательны при использовании ключевого слова 'new'. –

+0

получил, также оценил) –

4

Попробуйте это:

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

Я знаю, что это работает, но я не хочу определять свой объект концепции в области jquery, поскольку он грязный , – londondev

3

Вам просто нужно изменить variable имя где вызов эта функция.

Ответ

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

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

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

Лучше подход

Вы должны создать объект функции с помощью ()

var objConcetp = new concept(); 

использовать также constructor, а не непосредственно назначая values. Ваша функция выглядит так:

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

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

2 ответа решили проблему с хорошим объяснением. вы не добавили ничего нового .. –

+0

Да, я немного опоздал, чтобы ответить, пытаясь объяснить оба варианта: –

+0

np, вы ответили правильно, поэтому upvote - ваш :) –

Смежные вопросы