这是面向对象的Javascript

Is this Object Oriented Javascript

以下代码是否等同于具有关联函数的类?"obj.start"函数和startengine()函数有什么区别?(非逻辑方面,结构方面)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var Car = function (carElement)
{
            var obj = {},
                isRunning = false,
                dashboard,
                speed = 0,
                accelerometer,
                gearElement,
                transmission =
                {
                    'first': { ts: 15, rpm: 2 },
                    'second': { ts: 30, rpm: 4 },
                    'third': { ts: 50, rpm: 5 },
                    'fourth': { ts: 80, rpm: 5 },
                    'fifth': { ts: 110, rpm: 6 }
                };

        function startEngine()
        {
            //some code to start engine
        }

    obj.start = function ()
    {
         //more code..
    }

    obj.stop = function ()
    {
        //even more code...
    };

   (function init()
   {
      obj.start();
   }());

return obj;
};

[编辑]这个问题实际上描述了我的问题是关于什么的


Is the following code equivalent to a class with associated functions?

这取决于你如何实例化它。如果使用函数声明样式(如startengine使用),并且使用new关键字实例化它,并删除return值,那么是(尽管startengine是私有的,就像创建公共指针之前不是公共的)。

What is the difference between 'obj.start' function and startEngine() function?

区别在于:

  • startengine是一个函数声明,因此它被提升,而obj.start是一个未提升的匿名函数表达式。
  • StartEngine是Car类的一种类似私有的方法。obj.start不是。
  • obj.start是obj对象上的一个方法,它是Car类的属性。
  • 如果将car作为函数调用(不带new关键字),则返回obj,因此可以从Car外部调用obj的方法,而没有公共指针,则无法从Car外部调用startengine。