繁体   English   中英

JavaScript对象和函数之间的区别

[英]Difference between javascript object and function

对象1:

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

对象2:

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

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

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

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

当您需要一次性对象时,请使用对象初始化程序(第一个示例)。 如果需要具有相同形状的对象的工厂 ,请使用函数(如第二个示例)。

请注意, 如果您的工厂是构造函数(希望使用new调用的函数,例如vehicle函数),则应首先使用(压倒性的)约定将其大写。

但是,你的工厂并不一定是一个构造函数,它可能是刚刚返回一个对象的功能,在这种情况下,你woulnd't与使用new ,不会用this里面,并且通常不会利用它。 例如:

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

(如果要为对象分配特定的原型,则可以使用Object.create 。)是否使用该var v = vehicle();以及var v = vehicle(); 或构造函数,并且var v = new Vehicle(); 主要是风格问题。

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

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

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

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

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"
  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" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM