0

Javascriptでは、グローバル変数sld_labelを定義します。ここで、labelは任意の文字列にすることができます。これらは、setval関数を持つオブジェクトに初期化されます。qqという文字列パラメーターでlabelが渡される関数内で、sld_labelが定義されているかどうかを確認する必要があります。エラーを発生させずにこれを行うにはどうすればよいですか?

現時点では、次のものがあります(これは機能しますが、Firebugでエラーが発生します):-

function setclrques(qq,op)
{
  if (typeof(eval('sld_'+qq))=='object') eval('sld_'+qq+'.setval('+op+')');
}

ヘルプ!

4

4 に答える 4

1

グローバルの場合、最終的にはのメンバーにwindowなるため、次のように機能します。

if (typeof window['sld_' + qq] == 'undefined') alert('sld_' + qq + ' is not defined.');
于 2012-08-29T10:38:00.027 に答える
0
if (typeof window["sld_" + qq] === "object") {
    window["sld_" + qq].setval(op);
}
于 2012-08-29T10:38:18.673 に答える
0

変数が存在するかどうかを確認したい場合

if (typeof yourvar != 'undefined') // Any scope
if (window['varname'] != undefined) // Global scope
if (window['varname'] != void 0) // Old browsers
于 2012-08-29T10:39:21.027 に答える
0

私はこのようなものを実装しました。

function Test()
{
}

Test.prototype.setval = function(options)
{
    alert(options);
}

function setclrques(qq,op)
{
    var obj = window['sld_'+qq];
    if( obj!=undefined && obj.setval!=undefined )
    {
        obj.setval(op);
    }
}

var sld_qwer = new Test();
setclrques("qwer","test!");

ただし、可能であれば、オブジェクトを格納するために、個別の変数ではなく連想配列を検討することをお勧めします。

function Test()
{
}

Test.prototype.setval = function(options)
{
    alert(options);
}

var sld = [];
sld["qwer"] = new Test();

function setclrques(qq,op)
{
    var obj = sld[qq];
    if( obj!=undefined && obj.setval!=undefined )
    {
        obj.setval(op);
    }
}

setclrques("qwer","test!");
于 2012-08-29T10:49:35.767 に答える