我正在尝试学习如何在JavaScript中定义一个类。我找到了这个链接(http://www.phpied.com/3-ways-to-define-a-javascript-class/),但它似乎不符合我的需求。从本质上讲,我想拥有一个具有属性和功能的类。初始化类时,我想自动调用init函数。此时,当我使用以下代码创建新项目时,出现错误:
var item = new Item();
错误说:对象没有方法'init'。
我的课程定义如下:
function Item() {
this.id = null;
this.name = "";
this.description = "";
this.init();
this.init = function () {
this.id = "54321";
};
}
我做错了什么?如何在JavaScript中创建构造函数?
答案 0 :(得分:10)
在定义之前,您正在调用init()
。只需将调用移到定义下面:
function Item() {
this.id = null;
this.name = "";
this.description = "";
this.init = function () {
this.id = "54321";
};
this.init();
}
答案 1 :(得分:0)
在定义之前调用init
方法。只有JavaScript中的FunctionDeclaration
被提升。不是FunctionExpression
分配给变量。请记住,只有声明才会被提升。不是定义。
答案 2 :(得分:0)
在实例化Item类时,可以使用Item的原型从构造函数中取出一些逻辑。在下面的示例中,Item使用原型中的所有默认属性(包括init函数)进行实例化
function Item() {
this.init();
}
Item.prototype = {
id: null,
name: '',
description: '',
init: function () {
this.id = "54321";
}
};
有许多方法可以操作原型 - 这里设置为一个Object来同时设置所有属性,但是可以使用Item.prototype.someVariable = something
样式语法单独添加每个项目。
关于设置原型的一个注意事项 - 任何非原始数据类型(即:不是布尔值,数字或字符串)将在所有实例之间共享(对于共享函数(如init函数)很有用),而原语将是每个实例。 / p>