你不知道的JavaScript之this(二)

1 优先级 new绑定>显式绑定>隐式绑定>默认绑定

2 柯里化:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。(.bind()可以进行柯里化)

function foo(p1,p2) {  
  this.val=p1+p2;
}  
var bar=foo.bind(null,"p1");
var baz=new bar("p2");
console.log(baz.val);// p1p2

3 把null,undefined作为this的绑定对象传入call,apply或者bind这些调用会被忽略,应用的是默认绑定规则

4 Object.create(null)不会创建Object.prototype这个委托,比{}更空。

function foo(a,b) {  
  console.log("a:"+a+",b:"+b);
}
var o=Object.create(null);
foo.apply(o,[2,3]);//a:2,b:3
var baz=foo.bind(o,3);
baz(4);//a:3,b:4

5 apply妙用

Math.max / Math.min 可以实现得到数组中最大/最小的一项   Math.max.apply(null,arr)

Array.prototype.push 可以实现两个数组合并 

vararr1=new Array("1","2","3"); 
vararr2=new Array("4","5","6"); 
Array.prototype.push.apply(arr1,arr2); 

6 间接引用,一般发生在赋值时

function foo() {  
  console.log(this.a);
}
var a=2;
var o={a:3,foo:foo};
var p={a:4};
o.foo();// 3
(p.foo = o.foo)(); // 2  赋值返回的是目标函数的引用,因此调用位置是foo
p.foo();// 4 

7 箭头函数根据当前词法作用域来决定this,会继承外层函数调用的this绑定。

猜你喜欢

转载自blog.csdn.net/qq_22182279/article/details/80529612