码迷,mamicode.com
首页 > 移动开发 > 详细

JS之call/apply/bind

时间:2016-09-10 20:30:20      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

 

测试代码:

var a = 1;
var obj = {
     a = 2;  
}

function test(a){
    alert(a);
    alert(this.a);  
}

 

1.test(3);

结果:3,1

函数中this指向window对象

2.test.call(thisObj,param1,param2....);

  thisObj:test函数中this的指向

  param1,param2...:传给test函数的参数

3.test.call(null,3)或者test.call(undefined,3);

结果为:1,3;

当thisObj是undefined或者null时,test中的this指向window

4.test.call(1,3);或者test.call("a",3)或者test.call(false,3)或者test.call([12],3)或者test.call(function(){},3)或者test.call(/ao/g,3);时

结果为:3,undefined

此时this的值为1,"a",flase,[12],function(){},/ao/g;里面没有a属性

5.test.call(obj,3);

结果为:3,2

6.test.apply(thisObj,[param1,param2...]);

除了给test传参数以数组形式,其他和test.call一样

7.test.bind(thisObj,param1,pamra2...);

bind()返回新的函数,这个函数是test的复制,但是里面的this指向thisObj

源码:

Function.prototype.bind = function(scope){
  var fn = this;
  return function(){
      fn.apply(scope);
   }
}

 

案例:

1.

var x = 100;
var foo = {
    x:200    
    }
var bar = function(a,b){
    console.log(this.x,a,b);    
}
bar(1,2);
var nBar = bar.bind(foo,4,5);
nBar();

 

bar(1,2)打印出:100,1,2;this指向widdow;

nBar()打印出:200,4,5;this指向foo,而且nBar在创建时,将4,5保存到nBar的参数列表中

2.

var x = 100;
var foo = {
    x:200    
}
var bar = function(a,b){
    console.log(this.x,a,b);    
    console.log(arguments);
}
bar(1,2);
var nBar = bar.bind(foo,4,5);
nBar(6,7);

 

nBar执行时:arguments里面保存了4,5,6,7

3.

 

JS之call/apply/bind

标签:

原文地址:http://www.cnblogs.com/bibiafa/p/5860078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!