![](/img/trans.png)
[英]What is the difference between these two different ways of creating an object literal
[英]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.