1. 物件的簡潔語法
//傳統物件_單體模式寫法 key-value模式
var person = ,
showage:function()
};
console.log(person.showname());
// pp
console.log(person.showage());
// 24
//es6_單體模式寫法 不需要寫key
var name = 'yy';
var age = 26;
var person = ,
showage()
}; console.log(person.showname());
console.log(person.showage());
2.屬性的遍歷
es6 一共有 5 種方法可以遍歷物件的屬性。
(1)for...in
for...in
迴圈遍歷物件自身的和繼承的可列舉屬性(不含 symbol 屬性)。
(2)object.keys(obj)
object.keys
返回乙個陣列,包括物件自身的(不含繼承的)所有可列舉屬性(不含 symbol 屬性)的鍵名。
(3)object.getownpropertynames(obj)
object.getownpropertynames
返回乙個陣列,包含物件自身的所有屬性(不含 symbol 屬性,但是包括不可列舉屬性)的鍵名。
(4)object.getownpropertysymbols(obj)
object.getownpropertysymbols
返回乙個陣列,包含物件自身的所有 symbol 屬性的鍵名。
(5)reflect.ownkeys(obj)
reflect.ownkeys
返回乙個陣列,包含物件自身的所有鍵名,不管鍵名是 symbol 或字串,也不管是否可列舉。
以上的 5 種方法遍歷物件的鍵名,都遵守同樣的屬性遍歷的次序規則。
3. super關鍵字
關鍵字super
,指向當前物件的原型物件。
注意,super
關鍵字表示原型物件時,只能用在物件的方法之中,用在其他地方都會報錯。
const proto = ;
const obj =
};object.setprototypeof(obj, proto);
obj.find() // "hello"
4. object.assign()
es6 物件提供了object.assign()這個方法來實現淺複製。object.assign()可以把任意多個源物件自身可列舉的屬性拷貝給目標物件,然後返回目標物件。第一引數即為目標物件。
const obj = object.assign({}, obja, objb)
const target = ;
const source1 = ;
const source2 = ;
object.assign(target, source1, source2);
target //
注意,如果目標物件與源物件有同名屬性,或多個源物件有同名屬性,則後面的屬性會覆蓋前面的屬性。
(1)為物件新增屬性
class point ); // 代替 this.x=x ; this.y=y
}}
上面方法通過object.assign
方法,將x
屬性和y
屬性新增到point
類的物件例項。
(2)為物件新增方法
object.assign(someclass.prototype, ,
anothermethod()
});// 等同於下面的寫法
someclass.prototype.somemethod = function (arg1, arg2) ;
someclass.prototype.anothermethod = function () ;
上面**使用了物件屬性的簡潔表示法,直接將兩個函式放在大括號中,再使用assign
方法新增到someclass.prototype
之中。
(3)轉殖物件
function clone(origin) , origin);
}
上面**將原始物件拷貝到乙個空物件,就得到了原始物件的轉殖。
不過,採用這種方法轉殖,只能轉殖原始物件自身的值,不能轉殖它繼承的值。如果想要保持繼承鏈,可以採用下面的**。
function clone(origin)
(4)合併多個物件
將多個物件合併到某個物件。
const merge =
(target, ...sources) => object.assign(target, ...sources);
如果希望合併後返回乙個新物件,可以改寫上面函式,對乙個空物件合併。
const merge =
(...sources) => object.assign({}, ...sources);
5. object.keys(), object.values(), object.entries()
object.keys
方法,返回乙個陣列,成員是引數物件自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵名。
var obj = ;
object.keys(obj)
// ["foo", "baz"]
es2017 引入了跟object.keys
配套的object.values
和object.entries
,作為遍歷乙個物件的補充手段,供for...of
迴圈使用。
let = object;
let obj = ;
for (let key of keys(obj))
for (let value of values(obj))
for (let [key, value] of entries(obj))
object.values
方法返回乙個陣列,成員是引數物件自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值。
const obj = ;
object.values(obj)
// ["bar", 42]
object.entries()
方法返回乙個陣列,成員是引數物件自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值對陣列。
const obj = ;
object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]
ECMAScript6 入門 物件的擴充套件
物件的擴充套件 1 屬性的簡潔表示 也就是說當物件的屬性和值同名時,可以縮寫為乙個 const foo bar const baz baz 等同於const baz 方法簡寫 const o 等同於const o 2 屬性名表示式 可以使用表示式定義物件的key 已知定義物件的屬性方法 方法一 ob...
ES6 細化ES6之 物件的擴充套件
物件的屬性 屬性表示法es6 允許在大括號裡面,直接寫入變數和函式,作為物件的屬性和方法 es5 let name 張無忌 function sayme es5定義物件的屬性和方法的方式 var obj console.log obj.name 張無忌es6 let name 張無忌 functio...
ES6入門 正則的擴充套件
1 regexp建構函式 在es5中,regexp建構函式的引數有兩種情況。第一種情況是引數是字串,這時第二個引數表示正規表示式的修飾符 第二種情況是,引數是乙個正規表示式,這時會返回乙個原有正規表示式的拷貝。但是,es5不允許此時使用第二個引數,新增修飾符,否則會報錯 var regex new ...