创建对象的新示例的JavaScript

ryevplcw  于 2022-10-02  发布在  Java
关注(0)|答案(4)|浏览(160)

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

<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,但没有效果。我得到了一个“未捕获的TypeError:对象不是一个函数”。我对Java脚本非常陌生,所以我甚至不知道我这样做的方式是否正确。如有任何帮助,我们将不胜感激。

i1icjdpr

i1icjdpr1#

您的现有代码:

// 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社区的惯例。

2jcobegt

2jcobegt2#

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

当然,您可能也希望setter操作该数据。)

pzfprimi

pzfprimi3#

您描述的代码执行以下操作:

// 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;

这些声明的变量不会自动连接到对象。如果希望在对象上声明这些属性,您有两个选择:

1.声明为对象的属性
1.在对象的原型上声明

示例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);
5n0oy7gb

5n0oy7gb4#

要创建一个带有构造函数和默认值的非常简单的对象,您可以执行以下操作:

//My object with constructor
var myObjectWithConstrutorFunction = {

    //construtor function with default values in constructor
    myConstrutor: function(Name = 'bob', Age = 18){
        this.Name = name;
        this.Age = age;
    }
};

// instance
var myInstance = new myObjectWithConstrutorFunction.myConstrutor();

// show on console
console.log('object with constructor function: ', myInstance);

// show properties 
console.log(myInstace.Name, myInstance.Age);

PS:如果你在创建一个外部类,创建一个构造函数的名称与类的同名是一个很好的做法。

相关问题