2013-10-10 45 views
4

我試圖覆蓋Bigcartel的JS函數。我無法訪問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)); 
}, 

我知道,其他人提出類似的問題,但我是一個完整的noob當來瞭解如何實施JS(我只知道如何通過反覆試驗來推理)

如果任何人可以幫助我通過給我回答r那會很棒。

感謝,

iWed-


EDIT [10.10.13 :: 21:24小時]

爲了澄清,我沒有原來的JS文件直接訪問。我只能通過chrome查看它。我只能訪問html文件。這是一個大卡特爾主題編輯。

這裏是使用chrome複製JS的鏈接。 216 行是代碼,如果這能幫助:http://jsfiddle.net/w9GTJ/

+0

如果該功能是可訪問的,你可以簡單地通過* reference *來修改它。如果它可以從全局對象訪問,那麼你沒有任何問題,否則它可能很難做 –

+0

@LightStyle'但是當談到理解如何實現JS' – Dementic

+0

@Dementic時,我是一個完全noob,有很多的原因,恕我直言,投票結束這個問題,因爲它沒有相關的代碼,因爲它是不好描述。它可能在閉包內部,因此無法訪問,或者它可能是一個簡單的原型函數,可以很容易地被覆蓋。 –

回答

10

編輯:你很幸運。從發佈的代碼中,您可以看到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)); 
}; 

說明了一般情況:

在同一個全球範圍內的網頁運行加載的所有腳本,因此可以寫一個變量作爲事後插入腳本一樣簡單:

<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 
} 

最後,還有一個情況下,你根本無法覆蓋它,如果功能是在原代碼的私有:

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

// No way to access x.updateCart here 
+0

對於遲到的回覆感到抱歉 - 我被阻止了。它說我缺少一個;在聲明之前,爲什麼? –

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)); 
} 
+0

這根本行不通。原型屬性僅用於構造函數,並沒有表明Target對象是構造函數。 – Tibos

+0

你是對的,但事實上,我們沒有很多跡象 – fmgp