es6 對象的擴展
阿新 • • 發佈:2017-08-12
hello create cti turn 奇怪 是不是 字符 foo 瀏覽器
一、現在還有很多瀏覽器不能直接使用es6語法。特別是手機端的一些低版本的瀏覽器。都需要用bale轉換一下。
但是目前流行的框架中(vue,react,angular)。都有自己的腳手架,都能用webpack轉換下。或者直接自己配置webpack , fis3,nowa 等轉換。
照樣不是美滋滋。
二、屬性的簡潔寫法
//1.屬性簡潔表示語法 var foo = ‘bar‘; var obj = {foo}; console.log(obj); //創建對象的函數 function createOjb(x = 1,y = 1){ //x = 1, y = 1; 參數的默認值 return { x,y } } var newObj = createOjb(); console.log(newObj); //{x:1,y:1} var birthDate = ‘2017/8/12‘ //2 方法的簡寫 var person = { name:‘綠巨人‘, age:‘200歲‘, birthDate, say(){ console.log(this.name); //等同於 say:function(){ console.log(this.name)}; } } person.say(); // 綠巨人 //in 方法 var msg = { hello:‘helloValue‘, world:‘worldValue‘ } console.log(‘hello‘ in msg,‘helloValue‘ in msg); // true,false; => 判斷某個鍵值是在某個對象裏面//commonJS 模塊化輸出 function Obj(methods){ this.methods = methods || {}; } Obj.prototype.getItem = function(key){ return key in this.methods ? methods[key] : null; } Obj.prototype.setItem = function(key,value){ this.methods[key] = value; } var obj = new Obj(); //module.exports = {obj}; //4.註意點 :簡潔寫法的屬性名總是字符串,這會導致一些看上去比較奇怪的結果。
三、屬性表達式
//屬性名表達式 // 1. 對象添加屬性的兩種方式 var newObj = new Object(); newObj.name = ‘html‘; newObj[‘age‘] = ‘20歲‘; //對象字面量的方式 se5 中字面量方式下 屬性名字只能用 字符串形式。不能用 [‘name‘] var newObj1 = { name:‘css‘, age:‘30歲‘ } //SE6 var newObj2 = { [‘name‘]:‘js‘, [‘a‘ + ‘ge‘]:‘40歲‘, [‘hello world‘]:‘say hello world‘, [‘say‘ + ‘ hi‘](){ console.log(this[‘hello world‘]) } } console.log(newObj2.name); // jss console.log(newObj2[‘hello world‘]); // say hello world newObj2[‘say hi‘](); // say hello world //!!!註意 屬性名表達式是不能喝屬性簡寫一起使用的 var objKey = {a:1}; var newObj3 = { [objKey]:‘我是一個對象‘ } console.log(newObj3); // {[object object]:‘我是一對象‘} console.log(newObj3[{a:1}]); // 我是一個對象 console.log(newObj3[‘object object‘]); // undefined 是不是很奇怪啊
es6 對象的擴展