4

所以我现在正在处理一些代码,并且我正在尝试理解这段代码。我已经阅读了一些关于它的内容,似乎代码正在使用对象文字。所以这里是代码。

var car = function(){

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

    return {
        start: drive
    }

}();

在别处的另一个文件中调用

car.start(audi, black);

那么这是如何工作的。首先,在 javascript 中,一个类似乎可以有一个返回方法,而不仅仅是一个方法。返回方法也是调用方法吗?使用对象文字?我在这里有点困惑。

4

3 回答 3

3

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

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

那么这是如何工作的

car是一个匿名函数的返回值,它一被定义就被调用(它()在关闭之后})。

该返回值是使用对象字面量创建的对象。

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

于 2013-06-15T13:57:05.907 回答
2

那是一种封装模式。

  1. 对象:Javascript 中没有类,只有对象。持有一个具有语句中car所见结构的对象。return
  2. 函数:外部函数是匿名的(无名称),定义后直接调用(末尾的括号)。
  3. 局部作用域drive函数只存在于周围函数的作用域内。你不能drive从外面打电话。
  4. 封装:使用 return 语句,您可以控制哪些功能可以从外部访问以及如何标记。因此,car是一个具有一个名为的属性的对象,start它是 的函数定义drive

如果你car.start不带括号调用你会得到函数定义本身:

function (model, color) {
    ...
}

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

如果您调用car.start(audi, black),则使用给定参数执行函数并获取drive函数返回的任何内容。

于 2013-06-15T14:02:21.207 回答
1

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

于 2013-06-15T14:00:46.777 回答