这一节大大加强了,我对于js的理解。还有新的知识点,Object.is和Object.assign() 方法的用处,还有super关键字。以前以为只有类的继承才能用到super关键字。
// 扩展对象的功能性
// 对象的类别
// 1. 普通对象 具有javascript对象所有的默认内部行为
// 2. 特异对象 具有某些与默认行为不符的内部行为
// 3. 标准对象 ECMAScript6 规范中定义的对象,例如 Array、Date等。标准对象既可以是普通对象,
// 也可以是特异对象
// 4. 内建对象 脚本开始执行时存在与javascript执行环境中的对象,所有标准对象都是内建对象
// Object.is() 方法,如果两个参数类型相同,且具有相同的值 则返回true
// Object.assign() 方法,接受任意数量的源对象,并按指定的顺序将属性复制到接收对象中。如果有同名的属性,则排位靠后的源对象会覆盖排位考前的对象
/* es6的自有属性的枚举顺序
1. 所有数字键按升序排序
2. 所有字符串键按照他们被加入对象的顺序排序
3. 所有symbol键按照他们被加入对象的顺序排序
*/
// 简化原型的super 关键字
// 只能在简写方法的对象中使用super 才有效
// super的引用不是动态变化的,它总是指向正确的对象
/*let person = {
getGreeting: function() {
return super;
}
}
console.log(person.getGreeting()); // 出错*/
//正式的方法定义
// 在es6中正式将方法定义为一个函数,它会有一个内部的[[HomeObject]] 属性来容纳这个方法从属的对象
/*let person = {
// 是方法 getGreeting函数的[[HomeObject]]是 person
getGreeting() {
return 'hello';
}
}*/
// 不是方法
// function getGreeting(){
// return 'hello';
// }
// -->super 的所有引用都是通过[[HomeObject]]属性来确定后续的运行过程。第一步是在[[HomeObject]] 属性上调用 Object.getPrototypeOf()方法来检索原型的引用;然后搜索原型找到同名函数;最后将this绑定并且调用相应的方法