Atribut baharu yang ditambahkan pada objek es6 ialah "nama". Atribut nama boleh mendapatkan nama kaedah (fungsi) pada objek, contohnya "getName() {console.log(this.name);}"; kaedah pada objek literal juga merupakan fungsi, jadi terdapat juga atribut nama. Jika kaedah objek ialah nilai Simbol, maka atribut nama mengembalikan kandungan perihalan Simbol dalam kurungan.
Persekitaran pengendalian tutorial ini: sistem Windows 7, ECMAScript versi 6, komputer Dell G3.
Objek ialah struktur data yang sangat penting dalam JavaScript ES6 sangat mengembangkan objek dan menjadikannya lebih mudah untuk digunakan. Atribut baharu yang ditambahkan pada objek es6 ialah "nama".
Atribut nama kaedah objek
Pernahkah anda berfikir tentang cara mendapatkan nama kaedah pada objek? ES6 menambah atribut nama fungsi Jika fungsi memanggil nama secara langsung, nama fungsi akan dikembalikan. Kaedah pada objek literal juga merupakan fungsi dan oleh itu juga mempunyai atribut nama. Contoh berikut:
var person = { name: "Jack", getName() { console.log(this.name); }, }; person.getName.name // "getName"
Dalam kod di atas, atribut getName()
kaedah name
mengembalikan nama fungsi (iaitu nama kaedah)
Terdapat dua kes khas:
Fungsi Fungsi yang dicipta oleh pembina, atribut nama mengembalikan "tanpa nama"; , atribut nama mengembalikan "terikat" ditambah dengan nama fungsi asal .
(new Function()).name // "anonymous" var doSomething = function() { // todo }; doSomething.bind().name // "bound doSomething"
name
const key1 = Symbol('description content'); const key2 = Symbol(); let obj = { [key1]() {}, [key2]() {}, }; obj[key1].name // "[description content]" obj[key2].name // ""
Ungkapan atribut ringkas
ES6 membenarkan penulisan terus pembolehubah dan fungsi sebagai atribut dan kaedah objek1.1 Singkatan nilai atribut
Dalam ES5 kita tahu bahawa apabila mentakrifkan objek, atribut The nilai mesti ditulis Menurut ES6, jika nama atribut dan nama pembolehubah yang ditentukan adalah sama, nama pembolehubah boleh ditulis secara langsung dalam objek sebagai item dalam objek. Seperti berikut:
obj1 dan obj2 dalam kod di atas mempunyai maksud yang sama. Nama pembolehubah boleh ditulis terus dalam kurungan kerinting. Pada masa ini, nama atribut ialah nama pembolehubah, dan nilai atribut ialah nilai pembolehubah. Mari kita lihat contoh mengembalikan objek dalam fungsi: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}
Selain sifat yang boleh disingkatkan, kaedah dalam objek juga boleh disingkatkan, dan ia lebih ringkas dan jelas. Mari lihat contoh berikut:
Dalam kod di atas, apabila mentakrifkan kaedah pada objek dalam ES5, anda perlu menggunakan kata kunci fungsi untuk mentakrifkannya, manakala ES6 secara langsung menghilangkan titik bertindih dan fungsi kata kunci. Anda dapat melihat bahawa menggunakan pendekatan ringkas ES6 adalah lebih ekspresif. Kaedah ini lebih mudah apabila mengeksport modul dalam Node. Mari lihat contoh berikut: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: ƒ}
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 };
Secara amnya terdapat dua cara untuk mentakrifkan atribut objek dalam JavaScript. Seperti berikut:
Dalam kod di atas, kaedah satu secara langsung menggunakan pengecam untuk operasi tugasan Ini ialah operasi tugasan kami yang lebih biasa digunakan, tetapi jika atribut itu adalah ungkapan, anda boleh menggunakan kaedah dua, Tulis ungkapan dalam kurungan segi empat sama. Walau bagaimanapun, apabila mentakrifkan objek literal dalam ES5, anda tidak boleh menggunakan ungkapan sebagai atribut objek literal Anda hanya boleh mentakrifkan atribut melalui kaedah pertama (pengecam).// 方法一 obj.name = 'imooc'; // 方法二 obj['a' + 'ge'] = 7;
var obj = { name: 'imooc', age: 7 }
var key = 'name'; var obj = { [key]: 'imooc', ['a' + 'ge']: 7 }
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 '}'
注意 3: 如果属性的表达式是数组时,则和对象不一样。数组在 toString() 后会变成一个字符串,所以对象属性的表达式就是一个字符串。
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"
上面的代码中可以看出来,数组 keys 在 toString() 得到了 imooc,7 作为 obj 的属性。另外,我们也可以直接使用 keys 获取 obj 对象上的值。
【推荐学习:javascript视频教程】
Atas ialah kandungan terperinci Apakah atribut baharu yang ditambahkan pada objek es6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!