簡體   English   中英

創建對象的兩種方法,不確定是什么區別或使用哪種方法

[英]2 ways of creating an object, not sure what the difference is or which one to use

通常,我創建一個類,然后從該類實例化對象,但是,當我觀看教程時,我看到那個家伙甚至沒有類就僅通過使用函數來創建對象。

在下面的代碼中,我僅使用兩種方法來檢查控制台記錄包含對象的數組時的區別。 我用我的類生成的對象填充第一個數組,並使用函數生成的對象填充第二個數組。

在我console.log()這兩個數組之后,它們似乎是相同的。 那么,如果我可以創建類而無需創建對象,那么創建類又有什么意義呢?

var w = 40;
var cols, rows;
var grid = [];
var grid1 = [];

class Cell {
    constructor(i, j) {
        this.i = i,
        this.j = j
    }
}

function Cell2(i, j) {
    this.i = i;
    this.j = j;
}

function setup() {
    createCanvas(400, 400);
    cols = floor(width/w);
    rows = floor(height/w);

    for (var i = 0; i < cols; i++) {
        for (var j = 0; j < rows; j++) {
            var cell = new Cell(i,j);
            grid.push(cell);
        }
    }

    for (var i = 0; i < cols; i++) {
        for (var j = 0; j < rows; j++) {
            var cell1 = new Cell2(i,j);
            grid1.push(cell1);
        }
    }
}

class語法只是語法糖。 JavaScript實際上並沒有類繼承,它具有構造函數的原型繼承。 但這使很多人感到困惑,尤其是那些來自基於類的語言的人,因此添加了class關鍵字使他們變得更加熟悉。 實際上我真的很喜歡它:

  // new ES 6 syntax
  class Child extends Parent {
   constructor() { 
     super();
   }

   method() {
     super.method();
   }

  static staticMethod() { }
}

 // equals the old one:
 function Child() {
   Parent.call(this);
   // constructor...
 }

 Child.staticMethod = function() { /*...*/ };

 Child.prototype.method = function() {
   Parent.prototype.method.call(this);
 };

Javascript中沒有類。 Javascript不是面向對象的。 JavaScript遵循原型模式。 您在Javascript中創建的類只是一種語法糖,它的創建是為了使習慣於面向對象開發的開發人員更容易

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM