2013-10-10 2 views
4

Im пытается переопределить функцию JS от 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 (я знаю только, как tweek через пробную версию и ошибку)

Если кто-нибудь может быть так добр, чтобы помочь мне получить , давая мне ответ r это было бы здорово.

Спасибо,

iWed-


EDIT [10.10.13 :: 21: 24 часа]

Чтобы уточнить, я не имею прямой доступ к исходному файлу JS , я могу просмотреть его только через хром. У меня есть только доступ к html-файлам. Это для Большой картельной темы Edit.

Вот ссылка на скопированный JS, использующий хром. Line 216 является код, если это помогает: http://jsfiddle.net/w9GTJ/

+0

Если эта функция доступна, вы можете просто ее изменить с помощью * reference * ...Если он доступен из глобального объекта, тогда у вас нет проблем, иначе было бы очень сложно сделать –

+0

@LightStyle ', но я полный noob, когда дело доходит до понимания того, как реализовать JS' – Dementic

+0

@Dementic, есть много из причин, IMHO, проголосовать, чтобы закрыть этот вопрос, потому что он не имеет соответствующего кода внутри него и потому, что он плохо описан. Он может быть в закрытии и настолько недоступен, или это может быть простая прототипная функция, которую можно легко перезаписать. –

ответ

10

EDIT: Вам повезло. Из опубликованного кода вы можете увидеть, что метод 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

Это просто не работает. Свойство prototype используется только для конструкторов, и нет никаких указаний на то, что объектTargetObject является конструктором. – Tibos

+0

вы правы, но на самом деле у нас нет многих указаний – fmgp

Смежные вопросы