顺便宣传一下:Github来源: | 求星星 ✨ | 欢迎 star,鼓励一下作者。
希望能够帮助更多的小伙伴。加我😚即可交流问题(不是大佬,互相学习,创造良好的学习环境
)。以下哪些你不懂呢?
- 哪里不懂的,我们可以下方评论交流
扩展的对象功能
- 对象类别
命名一个函数为 createPerson()
,其作用创建了一个对象:
function createPerson(name, age) {
return {
name: name,
age: age
};
}
当对象的一个属性名称与本地变量名相同时,ES6:
function createPerson(name, age) {
return {
name,
age
},
}
当对象字面量中的属性只有名称时, JS 引擎会在周边作用域查找同名变量。若找到,该变量 的值将会被赋给对象字面量的同名属性。
es5写法:
var person = {
name: 'jeskson',
sayName: function() {
console.log(this.name);
}
};
es6写法:
var person = {
name: 'jeskson',
sayName() {
console.log(this.name);
}
};
- 需计算的属性名
示例:
var person = {},
lastName = "last name";
person["first name"] = "da1";
person[lastName] = "da2";
console.log(person["first name"]); // da1
console.log(person[lastName]); // da2
示例中两个属性名包含了空格,不能使用小数点表示法来引用它们,方括号表示法允许将任意字符串用作属性名。
示例优化:
var person = {
"first name": "jeskson"
};
console.log(person["first name"]); // jeskson
var lastName = "last name";
var person = {
"first name": "da1",
[lastName]: "da2"
};
console.log(person["first name"]); // "da1"
console.log(person[lastName]); // "da2"
对象字面量内的方括号表明该属性名需要计算,结果是一个字符串
示例:
var da = " name";
var pserson = {
["first + da ]: "da1",
["last" + da ]: "da2"
};
console.log(person["first name"]); // "da1"
console.log(person["last name"]); // "da2"
- 相等运算符
( == )
或严格相等运算符( === )
- ES6:
Object.is()
,返回true,要求二者类型相同并且值也相等
示例:
console.log(+0 == -0); // true
console.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false
console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); // true
console.log(5 == 5); // true
console.log(5 == "5"); // true
console.log(5 === 5); // true
console.log(5 === "5"); // false
console.log(Object.is(5, 5)); // true
console.log(Object.is(5, "5")); // false
Object.assign()
方法
混入
( Mixin )
是在 JS 中组合对象时最流行的模式。
浅复制,当属性值为对象时,仅复制其引用
function mixin(receiver, supplier) {
Object.keys(supplier).forEach(function(key) {
receiver[key] = supplier[key];
});
return receiver;
}
Object.assign()
方法,该方法 接受一个接收者,以及任意数量的供应者,并会返回接收者。
示例:
"use strict";
var person = {
name: "da1",
name: "da2" // 在 ES6 严格模式中不会出错
};
console.log(person.name); // "da2"
自有属性的枚举顺序
修改对象的原型
Object.getPrototypeOf()
方法来从任意指定对象中获取其原型Object.setPrototypeOf()
方法修改任意指定对象的原型
示例:
let person = {
getGreeting() {
return "hello";
}
};
let dog = {
getGreeting() {
return "hai";
}
};
let friend = Object.create(person);
console.log(friend.getGreeting()); // "hello"
console.log(Object.getPrototypeOf(friend) === person); // true
Object.setPrototypeOf(friend, dog);
console.log(friend.getGreeting()); // "hai"
console.log(Object.getPrototypeOf(friend) === dog); // true
使用 super 引用的简单原型访问
Object.getPrototypeOf()
方法确保了能调用正确的原型,并在其返回结果上附加了一个字符串。
示例:
let person = {
getGreeting() {
return "hello"
}
};
let dog = {
getGreeting() {
return "woof";
}
};
let friend = {
getGreeting() {
return Object.getPrototypeOf(this).getGreeting.call(this) + ", hi!";
}
};
Object.setPrototypeOf(friend, person);
console.log(friend.getGreeting()); // "hello hi!"
console.log(Object.getPrototypeOf(frined) === person); // true
Object.setPrototypeOf(friend,dog);
console.log(friend,getGreeting()); // "woof, hi!"
console.log(Object.getPrototypeOf(friend) === dog); // true
call(this)
,能确保正确设置原型方法内部的this
值
super
是指向当前对象的原型的一个指针
示例:
let friend = {
getGreeting() {
// Object.getPrototypeOf(this).getGreeting.call(this)
return super.getGreeting() + ", hi!";
}
}
使用ES6的super
,示例:
let person = {
getGreeting() {
return "hello";
}
};
let friend = {
getGreeting() {
return super.getGreeting() + ", hi!";
};
Object.setPrototypeOf(friend, person);
let relative = Object.create(friend);
console.log(person.getGreeting()); // "hello"
console.log(friend.getGreeting()); // "hello, hi!"
console.log(relative.getGreeting()); // "hello, hi!"