一:对象的属性
1:属性速记法:
//之前
function createPerson(name,age){
return {
name:name,
age:age
}
}
var person = {
name="hahah",
sayName:function(){
}
}
//ES6
function createPerson(name,age){
return {
name,
age
}
}
var person = {
name="hahah",
sayName(){
}
}
2:属性可以通过.或者[]引用内部属性:
[]方括号允许你将变量或者字符串字面量指定为属性名
var person = {};
var lastName = "last name";
console.log(person[lastName]);
3:重复属性覆盖,后一个会覆盖前一个同名属性:
4:属性枚举时定义了规则:
所有的数字类型键,按照升序排列;所有的字符串类型键,按照添加到对象的顺序排列;所有的符号类型,按照添加到对象的顺序排列;
var obj={
a:1,
0:1,
c:1,
2:1,
b:1,
1:1
}
obj.d=1;
console.log(Object.getOwnPropertyNames(obj).join(""));//"012acbd"
二:对象的方法
1:方法定义:
let person ={
//方法
getGreeting(){
return "hello"
}
//并非方法
function shareGreeting(){
return "Hi";
}
}
//方法里面可以使用super 非方法不能使用super
2:新增方法:
Object.is()比较两个对象值是否相等;
Object.assign()混入用于一个对象从另一个对象中接收属性方法,但是并未在在接收者上创建访问器属性,供应者拥有访问器属性。
三:原型与super
1:原型可以改变:
ES6通过添加Object.setPortotypeOf()方法可以运行修改任意指定对象的原型。
let person = {
getGreeting(){
return "hello"
}
}
let dog = {
getGreeting(){
return "woof"
}
}
let friend = Object.create(person);
console.log(friend.getGreeting())// "hello"
Object.setPrototypeOf(friend,dog);
console.log(friend.getGreeting())// "woof"
console.log(Object.getPrototypeOf(friend)===dog); // true
2:super关键字:
super关键字可以调用原型上面的方法,所调用的方法会被设置好内部的this绑定,以自动使用this值来进行工作。