你不知道的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绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值