首頁 > 軟體

ECMAScript 6物件的擴充套件實現範例

2022-08-17 14:00:52

屬性的簡潔表示法

物件(object)是 JavaScript 最重要的資料結構。ES6 對它進行了重大升級

ES6 允許在大括號裡面,直接寫入變數和函數,作為物件的屬性和方法。這樣的書寫更加簡潔。

const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}
// 等同於
const baz = {foo: foo};

上面程式碼中,變數foo直接寫在大括號裡面。這時,屬性名就是變數名, 屬性值就是變數值。下面是另一個例子。

function f(x, y) {
  return {x, y};
}
// 等同於
function f(x, y) {
  return {x: x, y: y};
}
f(1, 2) // Object {x: 1, y: 2}

下面是一個實際的例子。

let birth = '2000/01/01';
const Person = {
  name: '張三',
  //等同於birth: birth
  birth,
  // 等同於hello: function ()...
  hello() { console.log('我的名字是', this.name); }
};

CommonJS 模組輸出一組變數,就非常合適使用簡潔寫法。

let ms = {};
function getItem (key) {
  return key in ms ? ms[key] : null;
}
function setItem (key, value) {
  ms[key] = value;
}
function clear () {
  ms = {};
}
module.exports = { getItem, setItem, clear };
// 等同於
module.exports = {
  getItem: getItem,
  setItem: setItem,
  clear: clear
};

屬性名錶示式

JavaScript 定義物件的屬性,有兩種方法。

// 方法一
obj.foo = true;
// 方法二
obj['a' + 'bc'] = 123;

上面程式碼的方法一是直接用識別符號作為屬性名,方法二是用表示式作為屬性名,這時要將表示式放在方括號之內。 ES6 允許字面量定義物件時,用方法二(表示式)作為物件的屬性名,即把表示式放在方括號內。

let propKey = 'foo';
let obj = {
  [propKey]: true,
  ['a' + 'bc']: 123
};

方法的 name 屬性

函數的name屬性,返回函數名。物件方法也是函數,因此也有name屬性。

const person = {
  sayName() {
    console.log('hello!');
  },
};
person.sayName.name   // "sayName"

上面程式碼中,方法的name屬性返回函數名(即方法名)。

物件的擴充套件運運算元

《陣列的擴充套件》一章中,已經介紹過擴充套件運運算元(...)。ES2018 將這個運運算元引入了物件。 物件的解構賦值用於從一個物件取值,相當於將目標物件自身的所有可遍歷的(enumerable)、但尚未被讀取的屬性,分配到指定的物件上面。所有的鍵和它們的值,都會拷貝到新物件上面。

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x // 1
y // 2
z // { a: 3, b: 4 }

物件的新增方法-Object.is()

ES5 比較兩個值是否相等,只有兩個運運算元:相等運運算元(==)和嚴格相等運運算元(===)。它們都有缺點,前者會自動轉換資料型別,後者的NaN不等於自身,以及+0等於-0。JavaScript 缺乏一種運算,在所有環境中,只要兩個值是一樣的,它們就應該相等。 ES6 提出“Same-value equality”(同值相等)演演算法,用來解決這個問題。Object.is就是部署這個演演算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運運算元(===)的行為基本一致。

Object.is('foo', 'foo')
// true
Object.is({}, {})
// false

不同之處只有兩個:一是+0不等於-0,二是NaN等於自身。

+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

物件的新增方法-Object.assign()

Object.assign()方法用於物件的合併,將源物件(source)的所有可列舉屬性,複製到目標物件(target)。

const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

以上就是ECMAScript 6物件的擴充套件實現範例的詳細內容,更多關於ECMAScript 6物件擴充套件的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com