我目前正在学习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是函数的参数(Map)时。为了能够使用new,那么Map必须是一个类型,我还没有看到一个类型是其他语言的参数。
答案 0 :(得分:7)
关于Javascript的有趣之处在于确实没有课程。 Javascript中的等价物只是一种特殊的功能。实际上,忘记前一句中的“特殊”(只是想软化打击)。 任何函数都可以“作为一个类”并使用the new
operator进行实例化(虽然它只在该函数将内容分配给this
时才有用,因此生成的对象可以获得公共方法和属性)。
Javascript中的函数是一等公民。函数可以分配给变量,函数可以作为参数传递给其他函数。这使得将函数传递给另一个函数然后让其他函数用new
实例化它是完全合法的。
是的,这确实是一个非常奇怪的概念,用于包含面向类的编程语言。但是一旦你明白它就会变得非常直观。
那么你在问题中发布的代码会发生什么:
require
时,会调用将Map
map
答案 1 :(得分:5)
为了能够使用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)
答案 2 :(得分:3)
通过定义函数,您可以创建类
之类的东西function Apple (type) {
this.type = type;
this.color = "red";
this.getInfo = getAppleInfo;
}
然后你可以创建你的函数/类的新实例
var apple = new Apple('lobo');
因此,您的Map
参数是定义对象的函数