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

时间:2012-03-10 19:22:18

标签: javascript constructor prototype

好的,所以我知道原型用于继承,当与构造函数结合使用时,可以用来制作自定义方法。所以我的问题有两个方面:我如何为预构建的JavaScript对象制作方法,如整数,字符串,数组等......

另一个问题是除了制作我自己的方法之外,构建器/原型在日常Web开发(即创建网站)中的用处是什么,或者对于高端开发更是如此,例如制作Web应用程序或使用新技术进行开发(即html5 canvas或three.js)我还没有在网络上的任何地方看到过这种在日常情况下使用的例子。

3 个答案:

答案 0 :(得分:1)

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

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

至于它的用途,取决于你使用Javascript做什么。如果您编写客户端代码并且需要修改现有组件,那么对函数进行猴子修补可能会很有用。如果您需要在代码上使用某种结构(并且确实如此),则创建表示接口状态的对象可能很有用。

此外,了解如何使用工具通常可以避免自我伤害。 =)

如果您有兴趣,可能需要查看Crockford的page或购买他的Javascript:The Good Parts一书。

如果你了解这种语言,你可以避免很多困惑,你甚至可能会喜欢它并发现你可以在其中做很多有用的东西。

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:1)

这是一个扩展数字的例子:

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');

虽然我经常使用原型,但我还没有充分理由使用constuctor属性,它返回Object的类型。 W3schools.com在http://www.w3schools.com/jsref/jsref_constructor_math.asp

上很好地说明了这个属性