ES6擴充套件的物件功能

2021-10-01 22:32:58 字數 2525 閱讀 6678

在es5及更早版本中,物件字面量是「鍵/值對」的簡單集合。這意味著在屬性值被初始化時可 能會有些重複,例如:

可以像這樣用es6重寫:

es6同樣改進了為物件字面量方法賦值的語法。在es5及更早版本中,你必須指定乙個名稱 並用完整的函式定義來為物件新增方法,如下:

通過省略冒號與function關鍵字,es6將這個語法變得更簡潔,這意味著你可以這樣重寫 上個例子:

在es6中,需計算屬性名是物件字面量語法的一部分,它用的也是方括號表示法,與此前在 物件例項上的用法一致。例如:

物件字面量內的方括號表明該屬性名需要計算,其結果是乙個字串。這意味著其中可以包 含表示式,像下面這樣:

es6引入了object.is() 方法來彌補嚴格相等運算子殘留的怪異點。此方法接受兩個引數, 並會在二者的值相等時返回true        ,此時要求二者型別相同並且值也相等。這有個例子:

在許多情況下,object.is() 的結果與=== 運算子是相同的,僅有的例外是:它會認為+0與-0不相等,而且nan等於nan 。不過仍然沒必要停止使用嚴格相等運算子,選 擇object.is(),還是選擇==或=== ,取決於**的實際情況。

在es5嚴格模式下執行時,第二個name屬性會造成語法錯誤。但es6移除了重複屬性的 檢查,嚴格模式與非嚴格模式都不再檢查重複的屬性。當存在重複屬性時,排在後面的屬性 的值會成為該屬性的實際值,如下所示:

在本例中,person.name的值為 "greg",因為這是賦給該屬性的最後乙個值。

一般來說,物件的原型會在通過構造器或object.create() 方法建立該物件時被指定。直到 es5為止,js程式設計最重要的假定之一就是物件的原型在初始化完成後會保持不變。儘管 es5新增了object.getprototypeof()方法來從任意指定物件中獲取其原型,但仍然缺少在初始化之後更改物件原型的標準方法。es6通過新增object.setprototypeof()方法而改變了這種假定,此方法允許你修改任意指定物件的原型。它接受兩個引數:需要被修改原型的物件,以及將會成為前者原型的物件。 例如:

呼叫原型上的方法時要記住使用object.getprototypeof() 與call(this) ,這有點複雜難 懂,因此es6才引入了super。簡單來說,   super是指向當前物件的原型的乙個指標,實 際上就是object.getprototypeof(this)的值。知道這些,你就可以像下面這樣簡化    getgreeting()方法:

你能使用super引用來調 用物件原型上的任何方法,只要這個引用是位於簡寫的方法之內。試圖在方法簡寫之外的情 況使用        super會導致語法錯誤,正如下例:

此例使用了乙個函式作為具名方法,於是呼叫super.getgreeting()就導致了語法錯誤,因為在這種上下文中super是不可用的。

在es6 之前,「方法」的概念從未被正式定義,它此前僅指物件的函式屬性(而非資料屬 性)。es6 則正式做出了定義:方法是乙個擁有[[homeobject]]內部屬性的函式,此內部屬性指向該方法所屬的物件。研究以下例子:

此例定義了擁有單個getgreeting()方法的person物件。由於getgreeting()被直接賦給 了乙個物件,它的[[homeobject]]屬性值就是person。而另一方面,sharegreeting()函式沒有被指定[[homeobject]]屬性,因為它在被建立時並沒有賦給乙個物件。大多數情況 下,這種差異並不重要,然而使用super 引用時就完全不同了。

任何對super的引用都會使用[[homeobject]]屬性來判斷要做什麼。第一步是在[[homeobject]]上呼叫object.getprototypeof()       來獲取對原型的引用;接下來,在該原型上查詢同名函式;最後,建立this繫結並呼叫該方法。

ES6學習 擴充套件的物件功能

物件類別 2.使用方法 es6之前 function person name,age es6 function person name,age es6之前 var person es6 var person console.log object 5,5 false console.log objec...

ES6 細化ES6之 物件的擴充套件

物件的屬性 屬性表示法es6 允許在大括號裡面,直接寫入變數和函式,作為物件的屬性和方法 es5 let name 張無忌 function sayme es5定義物件的屬性和方法的方式 var obj console.log obj.name 張無忌es6 let name 張無忌 functio...

ES6的物件擴充套件內容

1.屬性的簡潔表示方法 允許在物件之中,直接寫變數,這時,屬性名為變數名,屬性值為變數的值。function f x,y 等同於 function f1 x,y console.log f 1,2 2.除了屬性方法也可以簡寫 const o 等同於 const o commonjs 輸出變數適合使用...