2016-09-30 129 views
0

我是那种在Javascript中一个新的,我有这样的情况: 我有一个分离的JavaScript文件,我创造了这样一个JavaScript对象:创建JavaScript对象,使用对象初始化

$(document).ready(function() {  
    var formasPagamento = { 
     Cartao: 0, 
     Crediario: 1, 
     Vale: 2 
    }; 
}); 

在这同样的文件,我有一个函数,我想用这个对象formasPagamento,但是当我尝试使用它时,我得到了错误,说明formasPagamento是未定义的。

例:

function CarregarDetalhesPlanoPagamento(idPosDocPagamento) {  
    if(idPosDocPagamento == formasPagamento.Cartao){ //undefined here 
     //do something 
    } 
} 

什么是initializa可以在另一个函数中使用的“全局”变量的正确方法?

+2

定义'。就绪的'$(文件)外VAR formasPagamento'(函数(){'范围 – vijayP

+0

或者如果你懒只是删除'var',你不必将它移到 – zer00ne

+0

谢谢你们,我没有注意到这个细节 我再也不会因为你而再犯这个错误了 – Maturano

回答

1

别在$(document).ready中打包var formasPagamento。这是将它放在全局的子范围内,使其无法从您的函数访问。 $(document).ready将检测DOM何时可以被操作,并且没有理由推迟声明该值。

+1

我没有注意这个细节。推出document.ready后,它现在工作! 谢谢! – Maturano

1

什么是初始化一个“全局”变量,可以是 在另一个函数中使用的正确方法是什么?

window.formasPagamento = { 
    Cartao: 0, 
    Crediario: 1, 
    Vale: 2 
}; 
1

在你的榜样,你宣布formasPagamentodocument.readyjQuery包装里面,所以formasPagamento只能从该函数内访问。

这被称为范围。

为了能够访问全球formasPagamento,您可以在$(document).ready..之前这样声明:

var formasPagamento = { 
    Cartao: 0, 
    Crediario: 1, 
    Vale: 2 
}; 

$(document).ready(function() {  
    ..page ready logic.. 
}); 

现在,当您使用功能,就可以看到formasPagamento

+1

我没有注意这个细节,在把document.ready放好之后,它现在工作了! 谢谢! – Maturano

1

这篇文章解释得相当好w3School 但基本上变量formasPagamento只能在文档就绪函数的函数范围内访问。

$(document).ready(function() { 
    var formasPagamento {}; 
    // CAN access here! 
} 
// CANNOT access here! 
+0

就是这样的人。谢谢你指出我这个细节 – Maturano