Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在JS/varien/product.JS中重写JS函数?_Javascript_Magento - Fatal编程技术网

Javascript 如何在JS/varien/product.JS中重写JS函数?

Javascript 如何在JS/varien/product.JS中重写JS函数?,javascript,magento,Javascript,Magento,我正在制作一个Magento扩展,它调用产品视图页面上的自定义JS文件。此自定义JS文件将最后加载,需要覆盖/JS/varien/product.JS底部的formatPrice()函数 原始formatPrice函数如下所示: formatPrice: function(price) { return formatCurrency(price, this.priceFormat); } 我想用以下内容替换/覆盖此功能: formatPrice: function(price) { if (p

我正在制作一个Magento扩展,它调用产品视图页面上的自定义JS文件。此自定义JS文件将最后加载,需要覆盖/JS/varien/product.JS底部的formatPrice()函数

原始formatPrice函数如下所示:

formatPrice: function(price) {
return formatCurrency(price, this.priceFormat);
}
我想用以下内容替换/覆盖此功能:

formatPrice: function(price) {
if (price % 1 == 0) { this.priceFormat.requiredPrecision = 0; }

return formatCurrency(price, this.priceFormat);
}

如何在自定义JS文件中编写JS代码,使其正确覆盖此函数?我对JS不太熟悉,所以不知道。

如果它是全局的,那么你可以只做
window.formatPrice=myNewFormatPrice如果它是一个对象的成员,那么您可以执行如下操作:
anObject.formatPrice=myNewFormatPrice

如果需要编辑对象的原型,请使用:
Product.options.prototype.formatPrice=myFormatPrice


您还需要查看
所需精度的访问权限。如果它是“私有的”或“被保护的”,那么你就不能访问它。

< P>。从功能的观点来看,J.HoLLOMAN的回答是正确的,你可以考虑这样做原型的方式,继承从<代码>产品。optsSp价格< /Cord>并使用那个新的类。这来自
app\design\frontend\base\default\template\catalog\product\view.phtml
,第36行(我认为您需要更改它):

原创

<script type="text/javascript">
    var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
</script>

var optionsPrice=新产品。optionsPrice();
已修改

<script type="text/javascript">
    var MyOptionPrice = Class.create(Product.OptionsPrice, { // inherit from Product.OptionsPrice
        formatPrice: function($super, price) { // $super references the original method (see link below)
            if (price % 1 === 0) { 
                this.priceFormat.requiredPrecision = 0; 
            }
            return $super(price);
        }        
    });
    var optionsPrice = new MyOptionPrice(<?php echo $this->getJsonConfig() ?>); // use yours instead
</script>

var MyOptionPrice=Class.create(Product.optionprice,{//inherit from Product.optionprice
formatPrice:function($super,price){/$super引用了原始方法(参见下面的链接)
如果(价格%1==0){
this.priceFormat.requiredPrecision=0;
}
返回$super(价格);
}        
});
var optionprice=新的MyOptionPrice();//用你的吧
使用(这样,您不必更改原始方法名称):


Product.OptionsPrice.prototype.formatPrice=Product.OptionsPrice.prototype.formatPrice.wrap(函数(父函数,价格){
如果(价格%1==0){
this.priceFormat.requiredPrecision=0;
}
返回父项(价格);
});
var optionsPrice=新产品。optionsPrice();
请参阅Prototype的继承和$super变量

再一次,我在Magento中看到了类似于@jholloman建议的代码,所以按照他的方式去做没有问题,但我想你可能想知道如何按照原型的方式去做。

什么对象是
formatPrice
的属性?它是全球性的吗?正如bfavaretto所说:它取决于
formatPrice
的定义。我相信它位于Product.options.price.prototype中。使用该原型创建一个对象,使用行
Product.OptionsPrice=Class.create()紧接着声明Product.OptionsPrice.prototype.OK之前,我得到了它:
函数myFormatPrice(price){if(price%1==0){this.priceFormat.requiredPrecision=0;}返回格式货币(price,this.priceFormat);}Product.OptionsPrice.prototype.formatPrice=myFormatPrice谢谢你的帮助。谢谢。我理解这种做法的理由。
<script type="text/javascript">
    Product.OptionsPrice.prototype.formatPrice = Product.OptionsPrice.prototype.formatPrice.wrap(function(parent, price) {
        if (price % 1 === 0) { 
            this.priceFormat.requiredPrecision = 0; 
        }
        return parent(price);        
    });
    var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
</script>