JavaScript创建对象的新实例

use*_*562 20 javascript object instances

所以我正在设计一个成绩簿界面,我的课程定义为:

<script>
course = new Object();
 var name;
 var gradingareas;
 var finalgrade;
</script>
Run Code Online (Sandbox Code Playgroud)

然后我想创建一个新实例:

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

 course1 = new course("CS1500", gradingareas, 85);
Run Code Online (Sandbox Code Playgroud)

我也试过没有前面的var无济于事.我得到一个"未捕获的TypeError:对象不是一个函数"我是一个非常新的JavaScript,所以我甚至不知道我是否正确的方式.任何帮助表示赞赏谢谢.

Que*_*tin 54

您现有的代码:

// 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;
Run Code Online (Sandbox Code Playgroud)

变量和对象之间没有联系.

看起来你想要更像的东西:

function Course(name, gradingareas, finalgrade) {
    this.name = name;
    this.gradingareas = gradingareas;
    this.finalgrade = finalgrade;
}
Run Code Online (Sandbox Code Playgroud)

然后:

var course1 = new Course("CS1500", gradingareas, 85);
Run Code Online (Sandbox Code Playgroud)

请注意使用大写字母来命名构造函数.这是JS社区的一个约定.


Mat*_*les 38

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 ];
      }
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

然后实例化一个新对象:

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

并开始使用所有私人数据:

course.get('name');

当然,您可能也希望setter也能操纵这些数据;)

  • 尽管两个答案都是正确的,但这个答案对我来说比接受的答案更有意义. (4认同)