2013-03-19 4 views
16

Так я проектирования интерфейса класса книги и я курс определяется как:JavaScript создание нового экземпляра объектов

<script> 
course = new Object(); 
var name; 
var gradingareas; 
var finalgrade; 
</script> 

потом я хочу, чтобы создать новый экземпляр:

var gradingareas = new Array("Homework", "Classwork", "Exams"); 

course1 = new course("CS1500", gradingareas, 85); 

I также попробовали без var перед безрезультатно. Я получаю «Uncaught TypeError: Object не является функцией». Я очень новичок в javascript, поэтому я даже не знаю, правильно ли я это сделаю. Любая помощь приветствуется. Спасибо.

+0

Это JavaScript, а не «Java-скрипт». –

+1

Сначала ознакомьтесь с основными сведениями: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects. – VisioN

ответ

40

Ваш существующий код:

// Creates a new, empty object, as a global 
course = new Object(); 
// Creates three new variables in the global scope. 
var name; 
var gradingareas; 
var finalgrade; 

Там нет никакой связи между переменными и объектом.

Похоже, что вы хотите что-то подобное:

function Course(name, gradingareas, finalgrade) { 
    this.name = name; 
    this.gradingareas = gradingareas; 
    this.finalgrade = finalgrade; 
} 

Тогда:

var course1 = new Course("CS1500", gradingareas, 85); 

Обратите внимание на использование прописной буквы для обозначения функции конструктора. Это соглашение в сообществе JS.

+0

Тогда как я могу ссылаться на поля курса, созданные с помощью функции? Идея заключается в том, что я хочу удержать их как экземпляр класса в java. – user1991562

+0

'course1.name' и т. Д. – Quentin

+0

Спасибо за ваше объяснение! вы спасли меня. Я потерял пару часов, пытаясь исправить ошибку, проблема в том, что я не понял структуру JavaScript javascript. –

32

JS является прототипом, а не классом, и если вы новичок в этом, есть преимущества, чтобы изучить это немедленно, а не пытаться сбрасывать с него классические модели наследования, однако классическое наследование живое и хорошее в JS.

Во всяком случае, чтобы ответить, как вы бы получить доступ к переменным:

course1.name отлично работает в примере выше.

Если вы хотите, чтобы приватизировать свои данные вы могли бы принять этот подход с помощью закрытия:

var Course = function(name, grade) { 
    // Private data 
    var private = { 
    name: name, 
    grade: grade 
    } 

    // Expose public API 
    return { 
    get: function(prop) { 
     if (private.hasOwnProperty(prop)) { 
     return private[ prop ]; 
     } 
    } 
    } 
}; 

Затем экземпляр нового объекта:

var course = new Course('Programming with JavaScript', 'A');

и начать использовать все, что личные данные:

course.get('name');

Конечно, вы, вероятно, хотите, чтобы сеттеры тоже манипулировали этими данными;)

+4

Несмотря на то, что оба ответа верны, для меня это имело больше смысла, чем принятый ответ. – carbontwelve

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