作为原型的函数的子函数
Sub functions of a function as a prototype
我试图用一个有两个子函数的函数来扩展Number对象。它工作得很好,只是子函数无法通过此访问Number对象值,而且我不知道如何访问它,也不知道这是否可能。
我的代码看起来像这个
var currency = function(prefix) {
var val = this.toString();
prefix = prefix || 'R$';
if(val > 99999) {
val = val.replace(/('d+)('d{3})('d{2})$/,prefix + " $1.$2,$3");
} else if(val == 0) {
val = prefix + ' 0,00';
} else {
val = val.replace(/('d+)('d{2})$/, prefix + " $1,$2");
}
return val;
};
currency.cents = function() {
var val = this.toString();
return val == 0 ? '00' : val.substring(val.length - 2);
};
currency.integer = function() {
var val = this.toString();
return val == 0 ? '0' : val.substring(0, val.length - 2);
};
Number.prototype.currency = currency;
alert((12345).currency()); // "R$ 123,45"
alert((12345).currency.cents()); // return " }"
问题出现在"var val=this.toString();"行中,因为这指的是函数本身,而不是Number对象的值。
有什么办法可以做到这一点吗?
第二个问题:为什么我需要把()放在数字12345周围才能工作?我没有扩展数字对象,而12345不是它的实例?
提前感谢
它可能看起来不像您想要做的那样好,但您可以像这样将所有三个方法直接添加到原型中。
var currency = function(prefix) {
var val = this.toString();
prefix = prefix || 'R$';
if(val > 99999) {
val = val.replace(/('d+)('d{3})('d{2})$/,prefix + " $1.$2,$3");
} else if(val == 0) {
val = prefix + ' 0,00';
} else {
val = val.replace(/('d+)('d{2})$/, prefix + " $1,$2");
}
return val;
};
var currencyCents = function() {
var val = this.currency();
return val == 0 ? '00' : val.substring(val.length - 2);
};
var currencyInteger = function() {
var val = this.currency();
return val == 0 ? '0' : val.substring(0, val.length - 2);
};
Number.prototype.currency = currency;
Number.prototype.currencyCents = currencyCents;
Number.prototype.currencyInteger = currencyInteger;
alert((12345).currency()); // R$ 123,45
alert((12345).currencyCents()); // 45
alert((12345).currencyInteger()); // R$ 123,
现在是你的第二个问题。。
为什么我需要在数字12345周围加()这个工作?我没有扩展数字对象,12345不是它的实例?
我发现这个问题要棘手得多。我在中找到了答案Nick Craver对为什么数字文字不能访问number方法的回答?-这是因为数字可以有小数,所以用括号将数字括起来,以清楚地表明句点是用于函数调用的,而不是用于数字的小数部分。
相关文章:
- 如何在JavaScript中实现子函数
- 单击从子函数返回父函数
- 将子函数的JavaScript字符串转换为实际函数
- 作为原型的函数的子函数
- 如何在父动画开始时激发jquery子函数
- 从子函数执行父函数;t更新父级'的属性
- 如何在子函数中返回值
- 调用子函数时阻止父jquery函数
- 如何在我的setAttribute函数中构建数组中的子函数
- 将变量传递给子函数 javascript
- 将状态传递给 javascript 中的子函数
- 从 javascript 执行代码隐藏函数/子 (VB.NET)
- JQUERY hover() 函数不适用于其子函数,使用 bootstrap 框架
- 从调用/子函数退出/中断主函数
- 如何从子函数 (JavaScript) 中更改函数的返回值
- 随机子字符串错误?“类型错误:在对象中找不到函数子字符串.".
- 为什么我的子函数需要“return”语句以避免出错?父函数没有“返回”,也没有错误
- 浏览器如何读取JavaScripts,它应该排在第一位(设置在顶部):事件?功能?或子函数
- 子函数中的Javascript新关键字
- 带有附加子函数的函数调用