web-dev-qa-db-ja.com

オブジェクトの新しいインスタンスを作成する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);

また、varを前に使用せずに試してみました。 「Uncaught TypeError:Object is a function」というメッセージが表示されます。javascriptが初めてなので、これが正しい方法かどうかさえわかりません。どんな助けも感謝します。

19
user1991562

既存のコード:

// 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コミュニティの慣例です。

53
Quentin

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');

もちろん、セッターにもそのデータを操作させたいと思うでしょう;)

37
Matt Styles

説明したコードは次のことを行います。

// Declares a memory variable called course and stores and object in it
var course = new Object();

// Declares three variables
 var name;
 var gradingareas;
 var finalgrade;

これらの宣言された変数は、オブジェクトに自動的に接続されません。これらのプロパティをオブジェクトで宣言する場合、2つのオプションがあります。

  1. オブジェクトのpropertiesとして宣言します
  2. オブジェクトのプロトタイプで宣言します

例1:オブジェクトのプロパティとして宣言:

// Declares a memory variable called course and stores and object in it
var course = new Object();

// Access or create new properties with . or [] operator
course.name = 'math';
course.gradingareas = 'muliple';
course['finalgrade'] = 'A'

console.log(course);

例2:プロトタイプで宣言する:

// Create a constructor function
function Course (name, grade) {
  this.name = name;
  this.grade = grade;
}

// course is added on the prototype
Course.prototype.gradingareas = 'some gradingareas';

// the name and the grade are added on the object itself
var course = new Course ('willem', 10);

console.log(course);
0