JavaScript创建对象的新实例

JavaScript创建对象的新实例,javascript,object,instances,Javascript,Object,Instances,因此,我正在设计一个成绩册界面,我的课程定义如下: <script> course = new Object(); var name; var gradingareas; var finalgrade; </script> 我也试过了,前面没有var也没有用。我得到了一个“UncaughtTypeError:Object不是函数”我对javascript非常陌生,所以我甚至不知道我是否用正确的方法来处理这个问题。谢谢你的帮助 您现有的代码: // Creates

因此,我正在设计一个成绩册界面,我的课程定义如下:

<script>
course = new Object();
 var name;
 var gradingareas;
 var finalgrade;
</script>
我也试过了,前面没有var也没有用。我得到了一个“UncaughtTypeError:Object不是函数”我对javascript非常陌生,所以我甚至不知道我是否用正确的方法来处理这个问题。谢谢你的帮助

您现有的代码:

// 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;
}
然后:


注意使用大写字母命名构造函数函数。这是JS社区的一个惯例。

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课程=新课程('JavaScript编程,'A')

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

course.get('name')


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

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

// 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:将它们声明为对象的属性:

    //声明一个名为course的内存变量,并在其中存储和对象
    var course=新对象();
    //使用访问或创建新属性。或[]运算符
    course.name='math';
    course.gradingaras='muliple';
    课程['finalgrade']='A'
    
    控制台日志(课程)要创建具有构造函数和默认值的非常简单的对象,可以执行以下示例:

    //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:如果您正在创建外部类,那么创建一个与类同名的构造函数名是一个很好的实践。

    请先阅读这里的基础知识:。那么我如何引用使用函数创建的课程字段?我的想法是,我希望像java中的一个类的实例一样保留这些内容。谢谢您的解释!你救了我。我花了几个小时试图修复一个bug,问题是我不理解javascript的oo结构。尽管两个答案都是正确的,但这一个对我来说比公认的答案更有意义。
    // 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;
    
    //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);