美文网首页前端开发es6入门基础
ES6基础入门教程(十五)对象新增方法

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

作者: 党云龙 | 来源:发表于2019-11-10 09:05 被阅读0次

    技巧部分:

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

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

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

    其他对象方法

    相关文章

      网友评论

        本文标题:ES6基础入门教程(十五)对象新增方法

        本文链接:https://www.haomeiwen.com/subject/ylbobctx.html