我正在设计一个成绩单界面,我有一个课程定义为:
<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在前面无济于事。我得到一个"未捕获的类型错误:对象不是一个函数"我是非常新的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;
}
:
var course1 = new Course("CS1500", gradingareas, 85);
注意使用大写字母来命名构造函数。这是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 course = new Course('Programming with 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;
这些声明的变量不会自动连接到对象。如果你想在对象上声明这些属性,你有两个选项:
- 将它们声明为属性对象 在对象的原型上声明它们
Example1:将它们声明为对象的属性:
// 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);
Example2:在原型上声明它们:
// 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);
要创建一个具有构造函数和默认值的简单对象,您可以这样做:
//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:如果您正在创建一个外部类,那么创建一个构造函数的名称与类的相同的名称是一个很好的做法。