Javascript,将类型作为函数中的参数传递
Javascript, pass type as parameter in functions
我目前正在学习Javascript,我注意到一些对我来说没有多大意义的东西。
在 ArcGIS 网站上的一个示例中,有这段代码
var map
require(["esri/map", "dojo/domReady!"], function(Map) {
map = new Map("mapDiv", {
center: [-56.049, 38.485],
zoom: 3,
basemap: "streets"
});
});
我不明白当地图是函数(Map(的参数时,你怎么能做"新地图"。为了能够使用new,那么map必须是一种类型,我还没有看到类型是其他语言的参数。
Javascript的有趣之处在于实际上没有类。相当于Javascript中的类只是一种特殊的函数。其实,忘掉上一句话中的"特殊"(只是想减轻打击(。任何函数都可以"充当类"并使用new
运算符进行实例化(尽管它实际上仅在该函数将内容分配给this
以便生成的对象获得公共方法和属性时才有用(。
Javascript中的函数是一等公民。函数可以分配给变量,函数可以作为参数传递给其他函数。这使得将一个函数传递给另一个函数,然后让另一个函数使用 new
实例化它是完全合法的。
这确实是一个非常奇怪的概念,用于面向类的编程语言。但是一旦你理解了它,它就会变得非常直观。
因此,您在问题中发布的代码中发生的事情是这样的:
- 执行
require
时,它会调用一个匿名函数,向其传递类函数 - 匿名函数将该
类函数分配给局部变量Map
- 然后,匿名函数创建
该类函数的实例。 - 实例被分配给全局变量
map
为了能够使用new,则map必须是一种类型
不。要使new
正常工作,Map
必须是一个函数。
是 JavaScript 中的一类对象,可以像任何其他数据一样处理(分配给变量、作为函数参数传递等(。
function One() {
this.foo = 1;
}
function myCallingThing(arg) {
alert(new arg().foo + 1);
}
var Two = One;
var instance = new Two;
alert(instance.foo);
myCallingThing(Two);
这并非 JavaScript 所独有。
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
sub example {
say "Hello";
}
sub callme {
my $var = shift;
$var->();
}
callme('&example);
或
#!/usr/bin/python
def example():
print "Hello'n"
def callme(arg):
arg();
callme(example)
通过定义函数,你可以创建类似类的东西
function Apple (type) {
this.type = type;
this.color = "red";
this.getInfo = getAppleInfo;
}
然后,您可以创建函数/类的新实例
var apple = new Apple('lobo');
所以你的Map
参数是一个定义对象的函数
相关文章:
- 在构造控制器、服务等时作为函数参数传递之前列出的角度 JS 变量
- 作为函数参数传递的匿名函数的范围
- 通过函数参数传递id
- 将数组值作为函数参数传递
- 是否需要初始化在 Javascript 中作为“类”构造函数参数传递的变量
- JavaScript 函数参数传递数组
- Angular2 将函数参数传递给构造函数
- 为什么我不能将角度变量作为函数参数传递
- jQuery - 基于作为函数参数传递的对象构建动态 if 语句
- 停止对作为函数参数传递到新列表的对象引用
- 在 JavaScript 中将数组作为内置函数参数传递
- AngularJS将范围变量名称作为函数参数传递
- Javascript 将对象作为函数参数传递
- 在对象上调用方法或将对象作为函数参数传递的差异
- 正确的方法:始终将所有变量作为函数参数传递
- 如何将动态创建的复选框值作为函数参数传递
- 节点简斯 |将对象作为函数参数传递
- 什么是将对象属性作为函数参数传递的良好策略/模式
- 将对象作为函数参数传递.不确定如何访问这些值
- 为什么我们要将函数参数传递到$scope$申请