簡體   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