首页 > 移动平台 > 详细

call()\apply()\bind()备忘录

时间:2014-04-16 17:05:26      阅读:478      评论:0      收藏:0      [点我收藏+]

这几个玩意儿几乎看一次忘一次,每次用都要重新看一遍,还是理解的不够。本文对不做深入解释,只根据自己的理解对函数定义进行语义化说明。

1.call()

fun.call(context,arg1,arg2),其中arg1,arg2等可无

example:

bubuko.com,布布扣
<input type="text" id="el" value="input text">
bubuko.com,布布扣
bubuko.com,布布扣
function func(){
    alert(this.value);
}

var value = "global";
var ele = document.getElementById("el");

func(); // global
func.call(ele); //input text,这里将func上下文从this(window)替换为ele
bubuko.com,布布扣

 

2.apply()

func.apply(context,[arg1,arg2]),其中[]内容可无,作用与call()一致,传参方式不一致而已。

example:

bubuko.com,布布扣
func.call(ele,arg1,grg2);
func.apply(ele.[arg1,arg2]);
bubuko.com,布布扣

 3.bind()

这是ECMAScript 5中的一个方法:bind()。这个方法会创建一个函数的实例,其this 值会被绑
定到传给bind()函数的值。即bind()的实现思路如下:

bubuko.com,布布扣
Function.prototype.bind = function(obj) {
    var self= this, 
    return function() {
        return self.apply(obj, arguments);
    };
}
bubuko.com,布布扣

实际的具体实现过程中,应考虑gruments中除去obj,以及没有arguments的情况等。

example:

bubuko.com,布布扣
window.color = "red";
var o = { color: "blue" };
function sayColor(){
    alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue
bubuko.com,布布扣

支持bind()方法的浏览器有:IE9+、Firefox 4+、Safari 5.1+、Opera 12+和Chrome。

call()\apply()\bind()备忘录,布布扣,bubuko.com

call()\apply()\bind()备忘录

原文:http://www.cnblogs.com/zldream1106/p/3666487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!