这是面向对象的Javascript

时间:2014-05-20 15:01:26

标签: javascript

以下代码是否等同于具有相关功能的类? 'obj.start'函数和startEngine()函数有什么区别? (不逻辑,结构明智......)

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;
};

[编辑] This question实际上描述了我的问题是什么

1 个答案:

答案 0 :(得分:2)

  

以下代码是否等同于具有相关功能的类?

这取决于你如何实例化它。如果您使用函数声明样式(如startEngine使用),并且使用new关键字对其进行实例化,并删除return值,则为yes(尽管startEngine是私有的,但在您创建之前不会公开指向它的公共指针。)

  

'obj.start'函数和startEngine()函数有什么区别?

区别在于:

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