2013-10-10 41 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