函数部分
- 函数参数使用默认值
function getValue() {
retrun 5;
}
// 默认值部分可以是变量
function add(first, second = getvalue()) {
return first + second;
}
- 通过剩余参数来实现不具名参数
// 注意: ...keys只能放于最后
// function pick(object, ...keys, last) { // 这种写法不被允许
function pick(object, ...keys) {
let result = Object.create(null);
for (let i = 0, len = key.length; i < len; i++) {
result[keys[i]] = object[keys[i]];
}
return result;
}
- 用Object.is() 替换'==='
console.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false
// 绝大数情况下, Object.is()和 === 相等的, 仅有少数情况
- 用Object.assign() 进行 Mixin 操作
let receiver = {};
Object.assign(receiver,
{
type: 'js',
name: 'file.js'
},
{
type: 'css',
get name() {
return 'file.js';
}
}
);
console.log(receiver.type) // 'css'
console.log(receiver.name) // 'file.js'
//Object.assign()不能复制get访问器
const descriptor = Object.getOwnPropertyDescriptor(receiver, 'name');
console.log(descriptor.get); //undefined
- ES6增加了修改原型的方法
let person = {
getGreeting() {
return "Hello";
}
}
let dog = {
getGreeting() {
return 'Woof';
}
}
//原型链为person
let friend = Object.create(person);
console.log(friend.getGreeting()); //Hello
console.log(Object.getPrototypeOf(friend) === person); //true
//将圆形链设置为dog
Object.setPrototypeOf(friend, dog);
console.log(friend.getGreeeting()); // woof
console.log(Object.getPrototypeOf(friend) === dog) // true
- 使用super对原型链进行更为简便的访问(必须简写)
let friend = {
getGreeting() { // getGreeting: function() { // 错误
// 等同于Object.getPrototypeOf(this).getGreeting.call(this)
return super.getGreeting() + ',hi!';
}
};
可以使用super调用任何原型上的方法; 而且当使用多级继承, super就能体现强大, es5中使用getPrototypeOf()多级继承非常麻烦, es6的super解决这一问题.
借助Object.setPrototyOf()
- 重新定义"方法"
在ES6之前, "方法"这个概念从未被正式定义, 它此前仅指对象的函数属性而非数据属性. ES6则正式将方法定义为: 一个拥有[[HomeObject]] 内部属性函数, 此内部属性指向该方法所属对象.
let person = {
// 方法
getGreeting() {
return "Hello";
}
};
// 并非方法
function shareGreeting() {
return "Hi!";
}
- TODO
这样子就评论了吗
是的, 以后这里也能联系我