ECMAScript6新增功能续
对象的属性
let food={};//一个空对象
food.sessert="cake";
food.hot drink="tea";//因为属性的名字包含空格,会报错
food["hot drink"]="tea";//可以用方括号修改
或者:属性的名字不一定要固定的字符串,它可以定义一个变量,如下
let food={};//一个空对象
let drink=hot drink;
food[drink]="tea";
Object.assign把对象的值复制给另外一个对象
let food={};
Object.assign(
food,
{drink:"tea"}
);
console.log(food);
输出:{drink: “tea”}
Object.setPrototypeOf
Object.setPrototypeOf可以在创建对象之后改变对象的prototype
let breakfast={
getDrink(){
return "milk";
}
};
let dinner={
getDrink(){
return "beer";
}
};
let sunday=Object.create(breakfast);
console.log(sunday.getDrink()); //milk
console.log(Object.getPrototypeOf(sunday)===breakfast); //true
Object.setPrototypeOf(sunday,dinner);
console.log(sunday.getDrink()); //beer
console.log(Object.getPrototypeOf(sunday)===dinner); //true
作用域
以前javascript中只有一个全局作用域和函数作用域,现在有了块级作用域,定义块,可以使用一个大括号
// if(true)
{
var i=0;
let a=6;
}
console.log(i);//0
console.log(a);//a is not defined
proto
es6中的proto可以得到或者设置proto
let breakfast={
getDrink(){
return "tea";
}
};
let dinner={
getDrink(){
return "beer";
}
};
let sunday={
__proto__:breakfast
};
console.log(sunday.getDrink());//tea
console.log(Object.getPrototypeOf(sunday)===breakfast);//true
sunday.__proto__=dinner;
console.log(sunday.getDrink()); //beer
console.log(Object.getPrototypeOf(sunday)===dinner);//true
super
当我设置let sunday={
__proto__:breakfast
};
之后,sunday就有看getDrink()的方法,可是我现在想给sunday添加自己的getDrink()的方法,这时,主要进行覆盖。
let sunday={
__proto__:breakfast,
getDrink(){
return super.getDrink()+"what";
}
};
console.log(sunday.getDrink());//teawhat
super.getDrink()的意识是执行一下对象breakfast中的getDrink()方法,得到返回值。