我想扩展数字类以具有实例函数,例如odd
and even
所以我可以做这样的事情:
2.odd() => false
2.even() => true
1.even() => false
1.odd() => true
扩展类是一种很好的 Ruby 实践:“Ruby 检查是否为偶数、浮点数".
JavaScript 中是否也是如此,或者它是否会导致性能问题或其他问题?
无论如何,尽管我尽了最大努力,我还是无法延长:
var NumberInstanceExtensions = {
accuracy: function(){
return 'This is cool ' + this
}
}
$.extend(Number.prototype,NumberInstanceExtensions);
alert( $.type(5) ); //-> number
//alert( 5.accuracy() ); //-> Uncaught SyntaxError: Unexpected token ILLEGAL
http://jsfiddle.net/VLPTb/2/
我怎样才能让它发挥作用?语法错误让我认为这不是 JavaScript 在基本层面上的工作方式。我最好的选择是扩展数学课并这样做:
Math.odd(2) => false
Math.even(2) => true
Math.even(1) => false
Math.odd(1) => true
这看起来比2.odd()
.
我认为只要您了解“扩展”的副作用就可以了。我经常修改 String 原型以添加“省略号”方法,这样我就可以做类似的事情
"SomeString".elipsis()
但从头开始。你不是在 JavaScript 中“扩展类”。 JavaScript 是一种基于原型的语言。您可以修改原型来完成您需要的操作。
您无法直接向号码本身添加方法。但是,您可以修改 Number 对象的原型:
Number.prototype.even = function(){
return this.valueOf() % 2 === 0;
}
这样,您将无法使用以下语法:
10.even();
但是,由于您不是硬编码的东西,否则您无论如何都不需要这个函数,您可以执行以下操作:
var a = 10;
a.even(); //true
我可能会说,您可以考虑添加一个实用程序对象来执行这些操作,因为修改原始原型并不总是保证没有副作用。
这个功能并不能真正为你带来任何收益。您正在检查奇数和偶数,将一行代码替换为另一行。想想区别:
var a = 10;
var aIsEven = a.even();
vs:
var a = 10;
var aIsEven = a % 2 === 0;
您获得了三个字符的代码,而第二个选项不太可能破坏您的“JavaScript”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)