【问题标题】:Difference between javascript object and functionjavascript对象和函数之间的区别
【发布时间】:2018-03-15 18:37:49
【问题描述】:

对象 1:

var vehicle = {
        name : "car",
        wheels : 4,
        fuel : "petrol"  
}

对象 2:

var vehicle = function(){
    this.name = "car",
    this.wheels = 4,
    this.fuel = "petrol"   
}

当两个对象都以相同的方式描述对象vehicle时,它们有什么区别?

【问题讨论】:

  • JavaScript 中的所有函数都是对象,可以用来创建对象。
  • 旁注:第二个例子中的逗号应该是分号。由于comma operator,代码有效,但通常使用逗号而不是分号是不好的做法,可能会咬你。

标签: javascript


【解决方案1】:

当两个对象以相同的方式描述对象车辆时,它们之间有什么区别?

他们没有。你的第一个vehicle 是一个对象; vehicle.wheels4。你的第二个 vehicle 是一个 function (也是一个对象,但这在这里并不重要); vehicle.wheelsundefined 因为该函数没有 wheels 属性。您必须使用var v = new vehicle();,然后使用v.wheels

当您需要一次性对象时,请使用对象初始值设定项(您的第一个示例)。如果您需要 factory 用于具有相同形状的对象,请使用函数(如您的第二个示例)。

注意 if 你的工厂是一个 constructor 函数(期望用new 调用的函数,例如你的vehicle 函数),它应该最初被(压倒性的)约定大写。

但是你的工厂不一定是一个构造函数,它可以是一个只返回一个对象的函数,在这种情况下你不会使用new,也不会在里面使用this ,并且通常不会将其大写。例如:

var vehicle = function(){
    return {
        name: "car",
        wheels: 4,
        fuel: "petrol"   
    };
}

(如果它想为对象分配一个特定的原型,它可以使用Object.create。)你是使用那个和var v = vehicle();还是一个构造函数和var v = new Vehicle();,主要是风格问题。

【讨论】:

    【解决方案2】:

    JavaScript 中的对象指的是任何实体或数据元素。而功能是为实现某事而执行的过程。一个函数可能会也可能不会返回一个对象。

    在这种情况下,看起来很混乱,因为它们都用于相同的目的。但是,通常这不是函数的使用方式。

    【讨论】:

      【解决方案3】:

      您可以创建此函数/类的新实例。

      var vehicle = function(){
          this.name = "car",
          this.wheels = 4,
          this.fuel = "petrol"   
      }
      
      Function/Class Objects can be instanciated.
      
      var v1 = new vehicle(); //Here v1 is an instance of vehicle
      console.log(v1.name); // Car
      

      在这种情况下,您不能创建此对象的新实例。它只是一个对象。

      var vehicle = {
              name : "car",
              wheels : 4,
              fuel : "petrol"  
      }
      

      【讨论】:

        【解决方案4】:

        Amrinder 是对的。在第一个示例中,您创建了一个对象

        var vehicle = 
        {
            name : "car",
            wheels : 4,
            fuel : "petrol"  
        }
        //vehicle.name shows "car"
        

        如果您使用选项 2,您将创建一个函数,您可以调用该函数来创建具有给定值的对象:

        var vehicle2 = function()
        {
                this.name = "car",
                this.wheels = 4,
                this.fuel = "petrol"   
        }
        var vehicle = new vehicle2(); 
        //vehicle.name shows "car"
        

        【讨论】:

          【解决方案5】:
          1. 对象 --> 有属性
          2. 函数 --> 返回一些值/对象对对象进行一些操作
          var vehicle = 
          {
              name : "car",
              wheels : 4,
              fuel : "petrol"  
          }
          typeOf(vehicle) // returns "Object"
          
          var vehicle = function(){
              this.name = "car",
              this.wheels = 4,
              this.fuel = "petrol"   
          }
          typeof(vehicle) // output "function"
          

          【讨论】:

            猜你喜欢
            • 2016-04-20
            • 2019-03-19
            • 2015-06-24
            • 2015-12-16
            • 1970-01-01
            • 2015-06-08
            • 1970-01-01
            • 2012-01-12
            • 2011-07-13
            相关资源
            最近更新 更多