ECMAScript 6對象的擴展實現示例
屬性的簡潔表示法
對象(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對象擴展的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 帶你領略Object.assign()方法的操作方式
- 全面解析js中的原型,原型對象,原型鏈
- JavaScript 賦值,淺復制和深復制的區別
- 詳解js創建對象的幾種方式和對象方法
- es6新增對象的實用方法總結