ES6入門 物件的擴充套件

2021-09-09 06:56:26 字數 3955 閱讀 7791

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.valuesobject.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 ...