无法在JavaScript中定义类

时间:2012-02-22 17:23:19

标签: javascript

我正在尝试学习如何在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中创建构造函数?

3 个答案:

答案 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>