我们假设以下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
对象。我甚至不确定是否可能。
所以我想我的问题如下:
Number
相同?