Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自定义方法以及web开发中构造函数和原型的有用性_Javascript_Constructor_Prototype - Fatal编程技术网

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

Javascript 自定义方法以及web开发中构造函数和原型的有用性,javascript,constructor,prototype,Javascript,Constructor,Prototype,好的,所以我知道prototype用于继承,当与构造函数耦合时,可以用于生成自定义方法。所以我这里的问题有两个:如何为预构建的JavaScript对象(如整数、字符串、数组等)创建方法 另一个问题是,除了制作我自己的方法之外,构造器/原型在日常web开发(即创建网站)中有什么用处,或者对于高端开发(如制作web应用程序或使用新技术开发(即html5 canvas或three.js))更有用我在web上没有看到在日常情况下使用此方法的示例。要为现有对象创建Javascript方法,可以简单地将其添

好的,所以我知道prototype用于继承,当与构造函数耦合时,可以用于生成自定义方法。所以我这里的问题有两个:如何为预构建的JavaScript对象(如整数、字符串、数组等)创建方法


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

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

String.prototype.firstLetter = function() { return this.charAt(0); }
var myStr = "Cool str!";
alert(myStr.firstLetter()); // 'C'
String.prototype.report_fish = function() { alert("a fish!"); };
"".report_fish();
至于它有多有用,这取决于您使用Javascript做了什么。如果您编写客户端代码,并且需要修改现有组件,那么对函数进行猴子补丁可能会很有用。如果您的代码需要某种结构(确实需要),那么创建一个对象来表示接口状态可能会很有用

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

如果您感兴趣,您可能想看看Crockford的或购买他的Javascript:The Good Parts book


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

你可以在类的原型中添加函数:

String.prototype.firstLetter = function() { return this.charAt(0); }
var myStr = "Cool str!";
alert(myStr.firstLetter()); // 'C'
String.prototype.report_fish = function() { alert("a fish!"); };
"".report_fish();
您也可以对数字执行此操作,尽管要调用的语法略有不同:

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

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

下面是一个扩展数字的示例:

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');
Number.prototype.between=函数(a,b){

return this>=a&&当您调用函数属性时,这些原语会被装箱并作为对象处理。
(Number.prototype.foo='bar',(5.foo)
计算结果为“bar”。啊,很好。这是我缺少的括号语法。
5.foo
也可以使用(注意空格)。这可能会让一些迷你们感到困惑。请原谅我的无知,但您所说的“接口状态”通常是指javascript(web)是什么意思更改用户界面,跟踪什么是什么,以及在任何给定时间内它在哪里,什么可能被证明是相当复杂的。基于OOP创建结构化代码可能有助于避免在该过程中发现的许多问题。