技巧部分:
一些简写:再对象内部,很多东西可以简写:
1.对象中的key:val可以缩 前提是他俩名字一样
const foo = 'bar';
const baz = {foo};
// 等同于
const bas = {foo: foo};
function f(x, y) {
return {x, y};
}
// 等同于
function f(x, y) {
return {x: x, y: y};
}
2.方法可以简写:利用key val名称一样可以缩写的原理
let a=20;
let obj={
a,
method(){
console.log(123);
}
}
console.log(obj.a);
obj.method();
方法篇:
1.Object.is 判断两个值是否完全相等,“同值相等” 跟===的作用是一样的
let a = 123;
let b = 234;
console.log(Object.is(a,b)); //false
let c =123;
let d =123;
console.log(Object.is(c,d)); //true
2.Object.assign 合并对象
这个Object.assign有两个作用,
第一个。把两个对象合并成一个,如果其中有一样的属性,用后面的覆盖前的那个。
let guai1 = {
name:"111",
atk:3,
def:5
}
let guai2 = {
name:"222",
atk:3,
def:5,
eff:"atk+10"
}
let target={}
Object.assign(target,guai1,guai2)
console.log(target);
第二个,拷贝对象,但是这里有一个问题,如果你直接用一个空对象拷贝这个对象,会形成一种名叫浅拷贝的东西,
//错误的写法
const obj1 = {a: {b: 1}};
const obj2 = Object.assign({}, obj1);
obj1.a.b = 2;
obj2.a.b // 2
//其实在es6中我们这么写就行了。
let obja={a:123,b:10}
let objb={c:110}
let objc={...obja,...objb}
console.log(objc);
3.proto
注意,__proto__和prototype的意思是一样的。都是给对象定义方法用的,
let obj={
name,
}
obj["name"] = "yunlong"
obj.__proto__.fun=(x)=>{
return x+2
}
console.log(obj.__proto__.fun(2));
这里面有一个小的区别,如果你的对象本身就是一个funciton的话,
let fun = function(){
console.log("abc");
}
console.log(fun.__proto__); // [native code]
console.log(fun.__proto__.__proto__);// 正常获得proto
4.setPrototypeOf 把方法定义到prototype上
Object.setPrototypeOf(要绑定的对象,包含有prototype方法的对象)
let obj={
name:"objname"
}
let b={
fun1(){
console.log(123);
},
fun2(){
console.log(223);
}
}
let c ={
fun3(){
console.log(444);
}
}
let d={...b,...c}
//Object.setPrototypeOf(对象,prototype)
Object.setPrototypeOf(obj,d)
//你能明白是什么意思吗,现在b已经相当于是obj的prototype了,
//所以b上面所有的方法在obj上都可以使用
obj.fun3();
另外还有几个类似的对象方法,因为不常用就不一一展示了。