Object ใน JavaScript, Object Literal

Shorthand Properties

Normal:

let x = 1, y = 2;
let o = {
    x: x,
    y: y
};

ทางลัดใน ES6

let x = 1, y = 2;
let o = { x, y };
o.x + o.y  // => 3

ชื่อ Property ที่มาจากการคำนวณ

ปกติ

const PROPERTY_NAME = "p1";
function computePropertyName() { return "p" + 2; }
let o = {};
o[PROPERTY_NAME] = 1;
o[computePropertyName()] = 2;

ES6
ในเครื่องหมาย [] จะเป็น JavaScript Expression อะไรก็ได้

const PROPERTY_NAME = "p1";
function computePropertyName() { return "p" + 2; }
let p = {
    [PROPERTY_NAME]: 1,
    [computePropertyName()]: 2
};
p.p1 + p.p2 // => 3

ชื่อ Property ที่เป็น Symbol

const extension = Symbol("my extension symbol");
let o = {
    [extension]: { /* extension data stored in this object */ }
};
o[extension].x = 0; // This won't conflict with other properties of o


Spread Operator ES2018 ขึ้นไป

จะแตกเฉพาะ own property เท่านั้น หลีกเลี่ยงการใช้ในลูปเพราะอาจจะทำให้เป็น O(n 2 ) ได้
let position = { x: 0, y: 0 };
let dimensions = { width: 100, height: 75 };
let rect = { ...position, ...dimensions };
rect.x + rect.y + rect.width + rect.height // => 175


Shorthand Methods

ปกติ

let square = {
    area: function() { return this.side * this.side; },
    side: 10
};
square.area() // => 100

ES6

let square = {
    area() { return this.side * this.side; },
    side: 10
};
square.area() // => 100


ใช้ชื่อ method เป็นค่าที่คำนวณมาหรือ symbol

const METHOD_NAME = "m";
const symbol = Symbol();
let weirdMethods = {
    "method With Spaces"(x) { return x + 1; },
    [METHOD_NAME](x) { return x + 2; },
    [symbol](x) { return x + 3; }
};
weirdMethods["method With Spaces"](1)  // => 2
weirdMethods[METHOD_NAME](1)           // => 3
weirdMethods[symbol](1)                // => 4

Property Getters and Setters

let p = {
    // x and y are regular read-write data properties.
    x: 1.0,
    y: 1.0,
    // r is a read-write accessor property with getter and setter.
    // Don't forget to put a comma after accessor methods.
    get r() { return Math.hypot(this.x, this.y); },
    set r(newvalue) {
        let oldvalue = Math.hypot(this.x, this.y);
        let ratio = newvalue/oldvalue;
        this.x *= ratio;
        this.y *= ratio;
    },
    // theta is a read-only accessor property with getter only.
    get theta() { return Math.atan2(this.y, this.x); }
};
p.r     // => Math.SQRT2
p.theta // => Math.PI / 4




Comments

Popular posts from this blog

15.8.4 การวาดลงบน cavas

15.8.3 Graphics Attributes

Class ใน JavaScript, การสร้าง class ด้วย keyword class