您好,登錄后才能下訂單哦!
今天小編給大家分享一下es6對象增加新的屬性怎么使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
es6對象增加新的屬性是“name”。name屬性可以獲取對象上方法(函數)的名字,例“getName() {console.log(this.name);}”;函數直接調用name就會返回函數名,而字面量對象上的方法也是函數,因此也有name屬性。如果對象的方法是一個Symbol值,那么name屬性返回的是帶中括號的Symbol的描述內容。
JavaScript 中對象是非常重要的數據結構,ES6 對對象進行了極大的擴展,使用上也更加簡潔。其中es6對象增加新的屬性是“name”。
對象方法的 name 屬性
你有沒有想過怎么獲取對象上方法的名字?ES6 增加了函數的 name 屬性,函數直接調用 name 會返回函數名。字面量對象上的方法也是函數,因此也有 name 屬性。如下實例:
上面代碼中,var person = {
name: "Jack",
getName() {
console.log(this.name);
},
};
person.getName.name // "getName"
getName()
方法的 name
屬性返回函數名(即方法名)
有兩種特殊情況:
Function 構造函數創造的函數,name 屬性返回 “anonymous”;
bind 方法創造的函數,name 屬性返回 “bound” 加上原函數的名字。
如果對象的方法是一個 Symbol 值,那么 (new Function()).name // "anonymous"
var doSomething = function() {
// todo
};
doSomething.bind().name // "bound doSomething"
name
屬性返回的是帶中括號的 Symbol 的描述內容。const key1 = Symbol('description content');
const key2 = Symbol();
let obj = {
[key1]() {},
[key2]() {},
};
obj[key1].name // "[description content]"
obj[key2].name // ""
擴展知識:es6對象中屬性的改進
1、簡潔的屬性表達
ES6 允許直接寫入變量和函數,作為對象的屬性和方法
1.1 屬性值簡寫
在 ES5 中我們知道,在定義對象時屬性的值是必須要寫的,在 ES6 中規定,如果屬性名和定義的變量名是一樣的,就可以在對象中直接寫這個變量名作為對象中的一項。如下:
上面代碼中的 obj1 和 obj2 是一樣的意思。變量 name 可以直接寫在大括號中。這時,屬性名就是變量名,屬性值就是變量值。var name = 'imooc';
// ES5
var obj1 = {
name: name,
}
// ES6
var obj2 = {
name,
}
下面我們來看一個在函數中返回一個對象的實例:
上面中的代碼可以看出,在我們平常開發中,組裝數據時是非常方便、有用的。// ES5
function getObj(x, y) {
return {x: x, y: y};
}
// 等同于 ES6
function getObj(x, y) {
return {x, y};
}
getObj(1, 2) // {x: 1, y: 2}
1.2 對象中方法的簡寫
除了屬性可以簡寫,對象中的方法也是可以簡寫的,而且更加簡潔明了。我們來看下面的例子:
上面的代碼中,ES5 中定義一個對象上的方法時需要使用 function 關鍵字來定義,而 ES6 則直接省略了 冒號和 function 關鍵字。可以看出使用 ES6 這種簡潔的方式更具表達力。const name = '張三'
// ES5
var person = {
name: name,
getName: function() {
console.log('imooc')
}
};
// ES6
var person = {
name,
getName() {
console.log(this.name)
}
};
console.log(person) // {name: "imooc", getName: ?}
在 Node 中進行模塊導出時,這種方式更加方便。我們看下面的例子:
上面的代碼中,我們定義了一個 person 對象,并向外暴露了若干方法用來操作 person 對象,在導出的時候可以看出,ES6 不需要重復地去寫變量名,從而更簡潔地表達了模塊所提供的方法。var person = {};
function getName () {
return person.name
}
function setName () {
person.name = '李四'
}
function clear () {
person = {};
}
// ES5 寫法
module.exports = {
getName: getName
setName: setName,
clear: clear
};
// ES6寫法
module.exports = { getName, setName, clear };
2、簡潔的屬性表達
在 JavaScript 中定義對象的屬性,一般有兩種方法。如下:
上面的代碼中,方法一直接使用標識符進行賦值操作,這是我們比較常用的賦值操作,但是如果屬性是一個表達式時,則可以使用方法二,把表達式寫在中括號中。// 方法一
obj.name = 'imooc';
// 方法二
obj['a' + 'ge'] = 7;
但是在 ES5 定義字面量對象時不能使用表達式作為字面量對象的屬性,只能通過第一種方式(標識符)來定義屬性。
ES6 對對象的屬性進行了擴展,可以覆蓋更多的場景,屬性可以使用變量的形式來定義,如下: 上面的代碼中字面量對象中的屬性是可以放在中括號中,中括號中的可以是變量,也可以是表達式。這無疑是擴展了屬性的功能,使編程更加靈活。var obj = {
name: 'imooc',
age: 7
}
var key = 'name';
var obj = {
[key]: 'imooc',
['a' + 'ge']: 7
}
另外,屬性也可以是一個帶空格的字符串,在取值時在中括號中可以直接使用字符串,也可以使用變量。如下:
表達式還可以用于定義對象上的方法名。 注意 1: 屬性名表達式與屬性簡潔表示,不能同時使用,會報錯。 上面的代碼會有語法錯誤var str = 'first name';
var obj = {
['I love imooc']: 'ES6 Wiki',
[str]: 'Jack'
}
console.log(obj['I love imooc']) // ES6 Wiki
console.log(obj[str]) // Jack
console.log(obj['first name']) // Jack
var person = {
name: 'Jack',
['get' + 'Name']() {
console.log(this.name)
}
};
console.log(person.getName()) // Jack
// 報錯
var name = 'Jack';
var age = 18;
var person = { [name] };
// Uncaught SyntaxError: Unexpected token '}'
注意 2: 屬性名必須是字符串類型的,如果屬性表達式是一個對象,則會先調 toString() 先將對象轉為字符串,然后才進行使用。
上面代碼中定義了兩個變量都是對象類型的,在調用 toString() 時會變為 [object Object] 屬性相同。所以,后面的屬性把前面的覆蓋了。var key1 = {name: 'imooc'};
var key2 = {age: 7};
var obj = {
[key1]: 'value content 1',
[key2]: 'value content 2',
}
console.log(obj) // {[object Object]: "value content 2"}
注意 3: 如果屬性的表達式是數組時,則和對象不一樣。數組在 toString() 后會變成一個字符串,所以對象屬性的表達式就是一個字符串。
上面的代碼中可以看出來,數組 keys 在 toString() 得到了 imooc,7 作為 obj 的屬性。另外,我們也可以直接使用 keys 獲取 obj 對象上的值。var keys = ['imooc', '7'];
var obj = {
[keys]: 'value content',
}
console.log(key.toString()) // "imooc,7"
console.log(obj) // {imooc,7: "value content"}
console.log(obj[keys]) // "value content"
以上就是“es6對象增加新的屬性怎么使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。