技巧部分:
一些簡寫:再對象內(nèi)部,很多東西可以簡寫:
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));
這里面有一個小的區(qū)別浩蓉,如果你的對象本身就是一個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)
//你能明白是什么意思嗎驾窟,現(xiàn)在b已經(jīng)相當(dāng)于是obj的prototype了庆猫,
//所以b上面所有的方法在obj上都可以使用
obj.fun3();
另外還有幾個類似的對象方法,因為不常用就不一一展示了绅络。