自定义方法以及web-dev中构造函数和原型的有用性



好的,所以我知道原型是用于继承的,当与构造函数结合时,函数可以用来创建自定义方法。因此,我的问题有两个:如何为预先构建的JavaScript对象(如整数、字符串、数组等)创建方法。。。

另一个问题是,除了制作我自己的方法之外,构造器/原型在日常网络开发(即创建网站)中有什么用处,或者对于高端开发(如制作网络应用程序或使用新技术开发(即html5 canvas或three.js))来说更有用吗。

要为现有对象创建Javascript方法,可以简单地将其添加到其构造函数的原型中:

String.prototype.firstLetter = function() { return this.charAt(0); }
var myStr = "Cool str!";
alert(myStr.firstLetter()); // 'C'

至于它有多有用,取决于你用Javascript做什么。如果您编写客户端代码,并且需要修改现有组件,那么monkey修补函数可能会很有用。如果您的代码需要一些结构(并且确实需要),那么创建一个对象来表示接口状态可能会很有用。

此外,知道如何使用工具通常可以避免自残

如果你感兴趣,你可能想看看克罗克福德的页面,或者买他的Javascript:《好零件》一书。

如果你了解了这门语言,你可以避免很多困惑,你甚至可能会喜欢上它,并发现你可以用它做很多有用的事情。

下面是一个扩展Number的示例:

Number.prototype.between = function(a, b) {
  return this >= a && this <= b
}
var num = 0;
if (num.between(0,0)) alert('is between')
else alert('not');

尽管我经常使用原型,但我还没有找到使用constructor属性的好理由,该属性返回Object的类型。W3schools.com在http://www.w3schools.com/jsref/jsref_constructor_math.asp

您可以将函数添加到类的原型中:

String.prototype.report_fish = function() { alert("a fish!"); };
"".report_fish();

您也可以对数字执行此操作,尽管要调用的语法略有不同:

Number.prototype.report_fish = function() { alert("a fish!"); };
(0).report_fish();

至于你为什么要这样做,我个人认为你应该尽可能避免对内置对象这样做。(在构建可重复使用的Javascript库时,一个需要解决的持续问题过去是,现在可能仍然是,人们倾向于覆盖和扩展Object原型。)

最新更新