Javascript,将类型作为函数中的参数传递

Javascript, pass type as parameter in functions

本文关键字:函数 参数传递 类型 Javascript      更新时间:2023-09-26

我目前正在学习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 实例化它是完全合法的。

是的,

这确实是一个非常奇怪的概念,用于面向类的编程语言。但是一旦你理解了它,它就会变得非常直观。

因此,您在问题中发布的代码中发生的事情是这样的:

  1. 执行require时,它会调用一个匿名函数,向其传递函数
  2. 匿名函数将该函数分配给局部变量Map
  3. 然后,匿名函数创建该类函数的实例。
  4. 实例被分配给全局变量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参数是一个定义对象的函数