Object ใน JavaScript, การขยายต่อเติม

 Object.assign() 

  จะ copy enumerable own property ของ object ที่ถัดจาก argument ตัวแรกใส่เข้าไปใน object ที่เป็น argument ตัวแรก ถ้าชื่อ property ซ้ำ ค่าจะถูกเขียนทับ

สร้าง object ที่เป็นค่าผสมระหว่าง default กับค่าใหม่
 
o = Object.assign({}, defaults, o);
o = {...defaults, ...o};


Serializing Objects

คือการเปลี่ยน object ให้อยู่ในรูป String ที่เป็น JSON (JavaScript Object Notation) หรือกลับกัน
let o = {x: 1, y: {z: [false, null, ""]}}; // Define a test object
let s = JSON.stringify(o);   // s == '{"x":1,"y":{"z":[false,null,""]}}'
let p = JSON.parse(s);       // p == {x: 1, y: {z: [false, null, ""]}}

ในการแปลง Object เป็น JSON NaN, Infinity, -Infinity, จะถูกแปลงเป็น null วันเวลาจะแปลงเป็น String ใน ISO format แต่JSON.parse จะไม่แปลมันกลับเป็นวันเวลา วันเวลาจะกลายเป็น String ตอนแปลงกลับแทน
 
Function, RegExp, Error, undefined จะไม่โดนแปลง 

JSON.stringify()  จะแปลงเฉพาะ enumberable own property เท่านั้น

Object Methods

Object ส่วนใหญ่จะสืบทอด property และ function มาจาก Object.prototype

toString() 

Method นี้จะถูกเรียกใช้โดยอัตโนมัตเมื่อโค้ดรอบข้างต้องการใช้ String เช่นเมื่อมีการใช้เครื่องหมาย + เพื่อต่อ String 
Method นี้ที่ติดมากับ Object.prototype จะใช้ทำอะไรได้ไม่มากนัก
let s = { x: 1, y: 1 }.toString();  // s == "[object Object]"

Class เฉพาะอื่นๆจะมี Method นี้เฉพาะต่างๆกันไป เช่น Array จะถูกแปลงเป็น CSV (comma seperated value) Function จะแปลงเป็น source code 

สร้าง toString ขึ้นมาเอง
let point = {
    x: 1,
    y: 2,
    toString: function() { return `(${this.x}, ${this.y})`; }
};
String(point)    // => "(1, 2)": toString() is used for string conversions

toLocaleString() 

Method นี้ที่ติดมากับ Object.prototype จะไปเรียก toString ต่อ ส่วน class Date กับ Number จะมี method เฉพาะของมันเอง

Method นี้ใน Array จะเรียกใช้ toLocaleString ของสมาชิกใน Array

สร้าง toLocaleString ขึ้นมาเอง

let point = {
    x: 1000,
    y: 2000,
    toString: function() { return `(${this.x}, ${this.y})`; },
    toLocaleString: function() {
        return `(${this.x.toLocaleString()}, ${this.y.toLocaleString()})`;
    }
};
point.toString()        // => "(1000, 2000)"
point.toLocaleString()  // => "(1,000, 2,000)": note thousands separators

valueOf() 

จะคล้ายกับ toString แต่จะแปลงค่าให้เป็นข้อมูลที่ไม่ใช่ String ส่วนมากจะเป็นตัวเลข
method นี้จะถูกเรียกใช้อัตโนมัตเมื่อโค้ดรอบข้างต้องการใช้ Number 
Method นี้ใน Date จะคืนค่าเป็นจำนวน milisecond จาก Epoch

let point = {
    x: 3,
    y: 4,
    valueOf: function() { return Math.hypot(this.x, this.y); }
};
Number(point)  // => 5: valueOf() is used for conversions to numbers
point > 4      // => true
point > 5      // => false
point < 6      // => true

toJSON() 

Method นี้ไม่มีอยู่ใน Object.prototype 
JSON.stringify() จะมองหา method นี้ใน Object และจะเรียกใช้มันในการแปลงค่าเป็น JSON


let point = {
    x: 1,
    y: 2,
    toString: function() { return `(${this.x}, ${this.y})`; },
    toJSON: function() { return this.toString(); }
};
JSON.stringify([point])   // => '["(1, 2)"]'

Comments

Popular posts from this blog

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

15.8.3 Graphics Attributes

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