在Javascript构造函数中定义属性的正确方法

时间:2015-03-03 02:52:00

标签: javascript

所以我是javascript的新手(来自强大的java背景),我想知道在类或构造函数中定义属性或变量的正确方法。

function RootNode(sTitle, authName, storyNum){
    this.sTitle = sTitle; 
    this.authName = authName; 
    this.storyNum = storyNum;
    this.creationDate =  new Date();
}

function RootNode(sTitle, authName, storyNum){

    var sTitle = sTitle; 
    var authName = authName; 
    var storyNum = storyNum;
    var creationDate =  new Date();  
}

3 个答案:

答案 0 :(得分:3)

简单回答:使用第一个


更详细的回答

第一个代码段设置了对象上的sTitleauthNamestoryNumcreationDate属性。

第二个片段创建了4个局部变量并设置了它们的值。这些变量无法从函数外部访问。

您可以像这样使用局部变量和对象变量:

function RootNode(sTitle, authName, storyNum) {
    this.sTitle = sTitle; // you can access this variable when you . into the object

    var privateVariable = 'You cannot see this variable when you . into the object directly';
    this.methodInObject = function() {
        return privateVariable; // but you can access the variable from the function
    }
}

注意: 您可能希望在构造函数的末尾添加return this;,以便它返回您构造的对象。

更新: 根据评论,必须return this;使用new RootNode自动执行此操作(+1自动使用?:))


进一步阅读

答案 1 :(得分:0)

您可以使用第一种风格,但我个人更喜欢这种风格:http://www.w3schools.com/js/js_objects.asp

答案 2 :(得分:0)

第一种方法是正确的。

function RootNode(sTitle, authName, storyNum) {
    this.sTitle = sTitle; 
    this.authName = authName; 
    this.storyNum = storyNum;
    this.creationDate = new Date();
}

然而,这种方法并不像一个类,它更像是一个独特的对象。以这种方式定义对象更像是Java类。

function RootNode(sTitle, authName, storyNum) {
    //your constructor
    this.sTitle = sTitle; 
    this.authName = authName; 
    this.storyNum = storyNum;
    this.creationDate = new Date();
}

RootNode.prototype.myMethod = function() {
    //my code
}

此模式非常有用,因为它允许多个实例化而无需复制属性的内存。此外,如果要创建子类,还需要它。阅读this以了解原型和构造函数属性