试图澄清这个JavaScript代码

时间:2013-06-15 13:50:11

标签: javascript

所以我现在正在研究一些代码,而且我正在尝试理解这些代码。我已经阅读了一下它,似乎代码使用的是对象文字。所以这是代码。

var car = function(){

    // ...
    function drive(model, color){
        // ... do something
    }
    // ...

    return {
        start: drive
    }

}();

在其他地方调用

car.start(audi, black);

这是怎么回事。首先,似乎在javascript中,一个类可以有一个返回方法,而不仅仅是一个方法。 return方法是调用方法吗?使用对象文字? 我在这里有点困惑。

3 个答案:

答案 0 :(得分:3)

  

首先,似乎在javascript中有一个类

JavaScript没有类。它与它们最接近的是构造函数,但是你没有这里的任何函数。

  

这是如何运作的

car是匿名函数的返回值,一旦定义它就会被调用(在结束()之后它有})。

返回值是使用对象文字创建的对象。

该对象文字的start属性的值是drive函数。函数是JavaScript中的第一类对象,因此可以像任何其他类型的对象一样传递。

答案 1 :(得分:2)

这是一种封装模式。

  1. 对象:Javascript中没有类,只有对象。 car包含一个具有return语句中所见结构的对象。
  2. 函数:外部函数是匿名的(没有名称),在定义后直接调用(最后的parantheses)。
  3. 本地范围drive函数仅存在于周围函数的范围内。您无法从外部拨打drive
  4. 封装:使用return语句,您可以控制哪些功能可以从外部访问以及如何标记。因此,car是一个对象,其中一个属性名为start,它是drive的函数定义。
  5. 如果您在没有括号的情况下调用car.start,您将获得函数定义:

    function (model, color) {
        ...
    }
    

    这是因为函数可以分配给变量(第一类)而不实际调用它们,因此您可以在以后使用您选择的范围调用预定义函数。

    如果你调用car.start(audi, black),你执行带有给定参数的函数,并获得drive函数返回的任何内容。

答案 2 :(得分:1)

从你看来你正在建立汽车的对象,然后你从另一个文件调用驱动器函数,并通过变量模型和颜色传递值audi和black。然后,您将返回对象的实例(“start”),其中包含变量和操作。