我从未在下面的语法上写过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
}
}
};
提前致谢。
答案 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://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.
干杯。