美文网首页
关于[].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