ES6基础入门教程(十五)对象新增方法

技巧部分:

一些简写:再对象内部,很多东西可以简写:

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();

另外还有几个类似的对象方法,因为不常用就不一一展示了。

其他对象方法

Copyright © 2023 | 粤ICP备14006518号-4

Proudly powered by WordPress | Theme: Beast Blog by Crimson Themes.