9

Bigcartel の JS 関数をオーバーライドしようとしています。JS ファイルにアクセスできません。

オリジナルは次のとおりです。

updateCart: function(cart) {
    $('aside .cart .count, .main header .cart').htmlHighlight(cart.item_count);
    return $('aside .cart .total').htmlHighlight(Format.money(cart.total, true, true));
  }, 

そして、私はこれを次のように変更しようとしています:

updateCart: function(cart) {
  $('aside .cart .count, .sml .cart, .big .cart .count').htmlHighlight(cart.item_count);
  return $('aside .cart .total').htmlHighlight(Format.money(cart.total, true, true));
},

他の人が同様の質問をしたことは承知していますが、JS を実装する方法を理解することに関しては、私は完全な初心者です (私は試行錯誤を繰り返す方法しか知りません)。

誰かが私に答えを与えることによって私を助けてくれるほど親切であることができれば、それは素晴らしいことです.

ありがとう、

私水-


編集 [10.10.13 :: 21:24hr]

明確にするために、元の JS ファイルに直接アクセスすることはできません。私はクロムを通してしか見ることができません。私はhtmlファイルにしかアクセスできません。ビッグカルテルのテーマ編集用です。

これは、chromeを使用してコピーされたJSへのリンクです。これが役立つ場合、216行目がコードです:http://jsfiddle.net/w9GTJ/

4

2 に答える 2

14

編集:あなたは運がいいです。投稿されたコードから、updateCart メソッドが window.Store グローバル オブジェクトにエクスポートされていることがわかります。解決策は、元のスクリプトがロードされた後に次のコードを追加することです。

window.Store.updateCart = function(cart) {
  $('aside .cart .count, .sml .cart, .big .cart .count').htmlHighlight(cart.item_count);
  return $('aside .cart .total').htmlHighlight(Format.money(cart.total, true, true));
};

一般的な状況の説明:

Web ページにロードされたすべてのスクリプトは同じグローバル スコープで実行されるため、変数の上書きは後でスクリプトを挿入するのと同じくらい簡単です。

<script>
var x = 5; // original script
</script>
<script>
x = 2; // your inserted script
</script>

見た目から、関数はオブジェクトのプロパティとして定義されています。

var x = {
   updateCart : function(cart) {
     // stuff
   }
}

したがって、それを上書きするには、次のことを行う必要があります。

x.updateCart = function(cart) {
  // your code
}

最後に、関数が元のコードでプライベートである場合、単純に上書きできない状況が 1 つあります。

function() {
   var x = {
      updateCart: function(){}
   }
}()

// No way to access x.updateCart here
于 2013-10-10T16:47:10.893 に答える
0

対応する js オブジェクトを見つけてアクセスできると仮定します。

[theTargetObject].prototype.updateCart= function(cart) {
          $('aside .cart .count, .sml .cart, .big .cart .count').htmlHighlight(cart.item_count);
          return $('aside .cart .total').htmlHighlight(Format.money(cart.total, true, true));
}
于 2013-10-10T16:45:36.693 に答える