美文网首页
关于[].slice.call()

关于[].slice.call()

作者: 苦庭 | 来源:发表于2020-06-26 20:03 被阅读0次

    https://stackoverflow.com/questions/2125714/explanation-of-slice-call-in-javascript

    有时候在看别人代码的时候总会看到一种写法[].slice.call(obj),这种写法其实是等价于Array.prototype.call(obj)的,两者的区别只在于前者会创建一个冗余的空数组,而后者不会。

    它的作用是把slice方法”借“过来给obj环境下使用。

    然后来说说原理。

    object1 = {
        name: 'Frank',
        greet() {
            alert(`Hello ${this.name}`);
        }
    };
    
    object2 = {
        name: 'Andy'
    };
    
    // Note that object2 has no greet method,
    // but we may "borrow" from object1:
    
    object1.greet.call(object2); // Will show an alert with 'Hello Andy'
    

    这里是一个“借”别人方法的例子。

    里面object1有一个greet()方法,object2想自己也能够有一个greet()的方法,但是又不想费劲自己撸一个。

    因此最好的方法就是,object1.greet()正常调用的同时,通过call()来改变闭包环境。

    1. 让我享有object2的环境
    2. 让我运行object.greet()。因为这时候我们的环境从object1变成了object2,所以就相当于把object1的greet()方法“借”到object2中使用了。

    相关文章

      网友评论

          本文标题:关于[].slice.call()

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