我可以在javascript中克隆Number对象吗?

时间:2015-03-01 09:06:53

标签: javascript jquery prototype javascript-objects prototypal-inheritance

我们假设以下javascript对象代表我网站中的一个表格行:

var oProduct = (function () {
    function oProduct(opts) {
        var o = opts || {},
            self = this;

        self.id = o.id || ''; // 423
        self.desc = o.desc || ''; // "Some product"
        self.price = o.price || 0; // 99.98
        self.currentDiscount = o.discount || 0; // .15
        self.prevDiscount = o.prevDiscount || 0; // .10
        self.nextDiscount = o.nextDiscount || 0; // .125
    }

    return oProduct;
})();

我尝试做什么......

现在我想为每个"折扣"添加一个方法。将十进制值转换为我的用户熟悉的字符串的值。因此.15之类的内容会转换为ADD'L 15%

我真的希望能够使用某种原型继承将该功能附加到oProduct的折扣属性,但我对原型不太满意。我的第一个想法是克隆javascript' Number对象(或者它是一个函数?)并将方法添加到其原型中:

function discountString(myval) {
            var a = $.extend(true, {}, Number);
            a.prototype.toTableDisplay = function () { return convertSmallPercentToEasyPercent(this) }; // this function is elsewhere. I don't think you'll need it, but let me know if I'm wrong.
            return a(myval);
        };

然后我将oProduct对象构造函数更改为:

var oProduct = (function () {
    function oProduct(opts) {
        var o = opts || {},
            self = this;

        self.id = o.id || ''; // 423
        self.desc = o.desc || ''; // "Some product"
        self.price = o.price || 0; // 99.98
        self.currentDiscount = discountString(o.discount || 0); // .15
        self.prevDiscount = discountString(o.prevDiscount || 0); // .10
        self.nextDiscount = discountString(o.nextDiscount || 0); // .125
    }

    return oProduct;
})();

然后使用这样的方法:

var cellData = myProductVariable.prevDiscount.toTableDisplay(); // returns "ADD'L 10%"

...但显然我还没有完全掌握原型的概念,因为我尝试了大约500种不同的方法来使它工作,但无法使其正常工作。我知道我可以直接将方法添加到Number.prototype对象,就像我看到人们一直这样做,但我不想将此方法添加到所有数字...只是这张桌子上的数字。

我使用对象做了类似的事情,但没有使用Number对象。我甚至不确定是否可能。


我的问题......

所以我想我的问题如下:

  1. 我知道我可以使用$ .extend()克隆/复制一个对象,但我可以这样做吗 与Number相同?
  2. 如果没有,任何人都可以推荐更好的方法解决这个问题吗?

0 个答案:

没有答案