0

:)私はいくつかのjavascriptを作成しました。うまく機能します。私のjavascriptの知識により、コンパクトで軽いスクリプトを作成することが制限されています。これは、aspx フレームワークのサブメニュー JavaScript です。ここではスクリプトです。

if (name === 'diensten/consultancy')
            {
                activeOne();
            }
    else if (name === 'diensten/maatwerk')
            {
                activeTwo();
                diesntenActive();
            }
    else if (name === 'diensten/outsourcing')
            {
                activeThree();
                diesntenActive();
            }
    else if (name === 'diensten/opleidingen')
            {
                activeFour();   
                diesntenActive();
            }
    else if (name === 'diensten/implementaties')
            {
                activeFive();
                diesntenActive();
            }
    else if (name === 'support')
            {
                activeOne();
                supportActive();
            }
    else if (name === 'support/contact')
            {
                activeTwo();
                supportActive();
            }
    else if (name === 'support/download')
            {
                activeThree();
                supportActive();
            }
    else if (name === 'overOns')
            {
                activeOne();
                overOnsActive()
            }
    else if (name === 'overOns/cebes')
            {
                activeTwo();
                overOnsActive()
            }
    else if (name === 'overOns/partner')
            {
                activeThree();
                overOnsActive();
            }
    else if (name === 'overOns/vacatures')
            {
                activeFour();
                overOnsActive();
            }
    else if (name === 'fireman')
            {
                productenActive();
            }
    else if (name === 'prio')
            {
                productenActive();
            }
    else if (name === 'firstwatch')
            {
                productenActive();
            }
    else if (name === 'firstwatchOnline')
            {
                productenActive();
            }
    else if (name === 'cebesFrame')
            {
                productenActive();
            }
    else if (name === 'cms')
            {
                productenActive();
            }   
    return false

JavaScriptについての知識を深めるために、このJavaScriptを短縮する方法があると確信していますが、緊急ではありません。どんな提案でも大歓迎です。ありがとう。

4

3 に答える 3

2

まずswitch、長いif/elseツリーの代わりにステートメントを使用します。

switch (name) {
  case 'diensten/consultancy': 
    activeOne (); 
    break;

  case 'diensten/maatwerk':
    activeTwo (); 
    diesntenActive (); 
    break;

  ...

  case 'cms':
    productActive (); 
    break;

  default:
    console.log ("No handler found for '" + name + "'!");
}

別の方法は、object関数を定義して関連するキーに関連付ける を使用することです。

var func_map = {
  'diensten/consultancy': function () {
    activeOne ();
  },

  'diensten/maatwerk': function () {
    activeTwo ();
    diesntenActive ();
  },

  'diensten/outsourcing': function () {
    activeThree();
    diesntenActive();
  },

  ...

  'cms': function () {
    productenActive();
  }
};

if (name in func_map) func_map[name] ();
else console.log ("No handler found for name = '" + name + "'!");
于 2011-12-14T06:23:02.523 に答える
2

ルックアップ テーブルに最適な状況です。名前にはさまざまな可能性があり、各名前に対するアクションは、1 つまたは複数の単純な関数呼び出しにすぎません。

つまり、ルックアップ テーブルを使用できます。name の値をキーとして配置し、その名前を呼び出す関数名の配列を配置します。テーブル内の 1 回のルックアップで、呼び出す関数の配列を取得し、配列をループして各関数を呼び出します。これには、追加のコード行を記述せずにテーブルに新しい行を追加するだけで、さらにアイテムを追加できるという利点があります。

var lookup = {
    "cms": [productenActive],
    "cebesFrame": [productenActive],
    "firstWatchOnline": [productenActive],
    "fireman": [productenActive],
    "firstwatch": [productenActive],
    "prio": [productenActive],
    "overOns/vacatures": [activeFour, overOnsActive],
    "overOns/partner":  [activeThree, overOnsActive],
    "overOns/cebes": [activeTwo, overOnsActive],
    "overOns": [activeOne, overOnsActive],
    "support/download": [activeThree, supportActive],
    "support/contact": [activeTwo, supportActive],
    "support": [activeOne, supportActive],
    "diensten/implementaties": [activeFive, diesntenActive],
    "diensten/opleidingen": [activeFour, dienstenActive],
    "dienstenout/outsourcing": [activeThree, dienstenActive],
    "diensten/maatwerk": [activeTwo, dienstenActive],
    "diensten/consultancy": [activeOne]
};

var fns = lookup[name];
if (fns) {
    for (var i = 0; i < fns.length; i++) {
        fns[i]();
    }
}
于 2011-12-14T06:30:02.070 に答える
0

これが私の試みです。それはあなたのケースに非常に特化しているという点で最高ではありません。ただし、多くの動的な呼び出しとコードの再利用を提供します。

var subPage = {
    'diensten' : ['consultancy', 'maatwerk', 'outsourcing', 'opleidingen', 'implementaties'],
    'support'  : [undefined, 'contact', 'download'],
    'overOns'  : [undefined, 'cebes', 'partner', 'vacatures'],
}
var others = ['fireman', 'prio', 'firstwatch', 'firstwatchOnline', 'cebesFrame', 'cms'];
var active = [activeOne, activeTwo, activeThree, activeFour, activeFive];

var addr = name.split('/');
if (subPage[addr[0]]){
    var index = subPage[addr[0]].indexOf(addr[1]);
    if (index != -1){
        active[index]();
        if (addr[1] !== 'consultancy') // Special case
            this[adder[0]+'Active'](); // Assuming this refers to the scope where diesntenActive() lives
    }
} else if (others.indexOf(addr[0]) != -1){
    productenActive();
}
return false;

とにかく、これはおそらく物事を過度に複雑にします。スクリプトサイズの縮小を本当に気にしない限り、switchステートメントまたはルックアップテーブルのいずれかを使用することをお勧めします。その場合にのみ、私の非常に専門的なアプローチを検討してください。

于 2011-12-14T07:47:02.657 に答える