2012-02-22 53 views
1

我想了解如何在JavaScript中定义一个类。我发现这个链接(http://www.phpied.com/3-ways-to-define-a-javascript-class/),但它似乎不符合我的需求。基本上,我想要一个具有属性和功能的类。当一个类被初始化时,我想自动调用init函数。此时,当我使用以下代码创建新项目时,出现错误:麻烦在JavaScript中定义一个类

var item = new Item();

错误说:对象没有方法'init'。

我的类定义如下所示:

function Item() { 
    this.id = null; 
    this.name = ""; 
    this.description = ""; 

    this.init(); 
    this.init = function() { 
     this.id = "54321"; 
    }; 
} 

我在做什么错?如何在JavaScript中创建构造函数?

回答

0

当你正在实例化Item类时,你可以使用Item的原型从构造函数中取出一些逻辑。在下面的例子中,项目被实例化与原型所有默认属性(包括初始化函数)

function Item() { 
    this.init(); 
} 

Item.prototype = { 
    id: null, 
    name: '', 
    description: '', 
    init: function() { 
    this.id = "54321"; 
    } 
}; 

有很多方法来操纵原型 - 在这里它被设置为一个对象一次设置所有属性,但它可以通过使用Item.prototype.someVariable = something样式语法单独添加每个项目。

关于设置原型的一个注意事项 - 任何非原始数据类型(即:非布尔值,数字或字符串)将在所有实例之间共享(对于像init函数那样共享函数很有用),而原语将是每个实例。

+0

谢谢你的回答。如果我错了,请纠正我,但不是布尔,数字和字符串基本类型?也许我已经准备好了它错了。无论哪种方式,我如何创建特定于实例的数组? – user208662 2012-02-22 18:29:45

+0

这是正确的 - 我说的是非原始的_not_布尔数和字符串...如果你需要每个实例的数组或对象,在构造函数中创建它们或作为原型上另一个函数的一部分,例如'函数Item(){this.obj = {}; }' – steveukx 2012-02-22 18:35:31

10

在定义它之前,您打电话给init()。只需将调用的定义如下:

function Item() { 
    this.id = null; 
    this.name = ""; 
    this.description = ""; 

    this.init = function() { 
     this.id = "54321"; 
    }; 

    this.init(); 
} 
+0

这仍然是在Javascript中定义类的错误方式。每当你创建一个新实例时,引擎都会重新创建所有的方法,而不仅仅是传递一个新的“this”给它们;你最好使用原型和主要功能作为构造函数 – Eopin 2012-02-22 17:27:58

0

要调用它的定义之前init方法。 JavaScript中只有FunctionDeclaration s被吊起。不是FunctionExpression s分配给一个变量。请记住,只有宣言是悬挂的。没有定义。