JavaScript容易混淆的地方

2020-03-17  本文已影响0人  moyahuang

JavaScript容易混淆的地方

▶splice vs. slice vs. split 🍕

splice 删除或增加 (split分离+ice加料)

slice 拷贝部分(a slice of pizza)

split 切段返回数组

Array: splice/slice

splice用于增加或删除元素

slice用于拷贝部分

String: slice/split

String的slice方法与数组类似,不再赘述。

split和join是两个相对的功能,前者用来切分对象,后者用来组合对象。

▶call vs. apply vs. bind

call和apply是所有Function对象都会继承的方法,用于将对象和方法解耦合。

FunctionObj.call(thisArg, a, b, ...);
FunctionObj.apply(thisArg,[a,b,...])

🌰来看一个栗子

function sum(a, b){
    var s=a+b;
    console.log(this.index+":"+s);
}
var counter={index:"ada"};
sum.call(counter, 1, 2);//ada:3
sum.apply(counter,[1,2]);//ada:3

bind和call, apply的区别在于,bind不会调用函数(从名字可以看出来),而是返回一个新函数(相当于把别的方法内容偷过来)。这个函数可以将参数thisArg预先绑定为运行时作用域,而不会受到函数调用方式的影响。

想要“激活”函数,就是在后面添加一对圆括号啦。

注意:偷来的方法的参数“绑定”时传入后无法被修改,这个特性可以用于预设一些参数,详情看下方延伸阅读。

🌰来看一个栗子

var a={
    index:1,
    func1: function(name){
        console.log(this.index+":"+name);
    }
}
var unboundedFunc=a.func1;//别的对象的方法也可以偷
unboundedFunc("hello");//undefined:hello(严格模式下)
var boundedFunc=unboundedFunc.bind(a,"hell");
boundedFunc("moya");//1:hell

延伸阅读:bind的使用场景

参考文档

https://medium.com/@jeanpan/javascript-splice-slice-split-745b1c1c05d2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

上一篇 下一篇

猜你喜欢

热点阅读