语法错误(声明"类"变量)

时间:2014-07-30 12:20:42

标签: javascript

我从未在下面的语法上写过javascript。我想要做的只是在函数" showUrlLink"之外声明一个变量,这样做的正确方法是什么?

//File test.js
    var Test =
                {
                    //Declare variable here to be used in showUrlLink
                    var test = "something";//This gives syntax error
                    showUrlLink: function() {
                        if (test === "something") {
                            //Do something
                        }
                    }
                };

提前致谢。

4 个答案:

答案 0 :(得分:1)

如果要在Test对象的范围内声明一些内部变量,但只返回“公共接口”,则应将其包装在函数中:

var Test = (function(){
    //Declare variable here to be used in showUrlLink
    var test = "something";
    return {
        showUrlLink: function() {
            if (test === "something") {
                console.log( test );
            }
        }
    }
}());

现在您可以执行Test.showUrlLink(),但您无法更改Test.test变量,因为它保留在闭包中,无法从外部范围访问。

http://jsfiddle.net/K3P25/

另请参阅:http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

答案 1 :(得分:0)

只需将对象添加为对象

即可
 var Test ={
                   test : "something",
                    showUrlLink: function() {
                        if (this.test === "something") {
                            //Do something
                        }
                    }
                };

答案 2 :(得分:0)

它是一个文字,所以您可以使用属性,或者只是在 Test变量之前声明变量。您不能在期望属性的文字中声明变量。

var Test = {
     test : "something",
     showUrlLink: function() {
         if ( this.test === "something") {
            //Do something
         }
     }
};

答案 3 :(得分:0)

依赖你如何制作/使用它。

最简单的修复(但可能不是最好的,因为你应该避免定义全局变量)是将你的var test = "something";声明移到Object声明之外:

// Defined before the Object below, so it works correctly
var test = "something";

var Test = {
    showUrlLink: function () {
        if (test === "something") {
            //Do something
            console.log("test is: " + test);
        }
    }
};

Test.showUrlLink();     // test is: something

或者,您可以将test定义为Object本身的属性。见下面的例子。

使用JavaScript对象:

var Test = {
    test: "something",
    showUrlLink: function () {
        if (this.test === "something") {
            //Do something
            console.log("this.test is: " + this.test);
        }
    }
};

Test.showUrlLink();     // this.test is: something

最后,您可以使用JavaScript类而不是Object。

使用JavaScript类:

/**
 * Class definition
 *
 */
var Test = function () {
    this.test = "something";
};

/**
 * Method for showing showUrlLink
 *
 */
Test.prototype.showUrlLink = function () {
    if (this.test === "something") {
        //Do something
        console.log("this.test is: " + this.test);
    }
};

// How to use the Class
var test1 = new Test();
test1.showUrlLink(); // this.test is: something

var test2 = new Test();
test2.showUrlLink(); // this.test is: something

总而言之,我通常更喜欢Classes而不是Objects,但前提是我发现自己在Object中定义了多个函数。而且,Classes允许您创建多个实例。

最后,JavaScript实际上没有“类”,但人们(像我一样)使用它们将它们称为类而不是构造函数。关于它的更多信息 in this link.

干杯。