js bind

1.作用

函数的bind方法用于将函数体内的this绑定到某个对象,然后返回一个新函数。

Fn.bind(obj, arg1, arg2,...);

Fn.bind(obj)     //新的函数  function () { [native code] }  看不到

Fn.bind(obj) ();      //执行函数    类似:a=function(){};    执行 a();   一个道理

2.实例

var Fn = function(){
    console.log(this);
}
var obj = {a:1};

Fn();
-> window      //在浏览器环境

Fn.bind(obj)
-> function () { [native code] }    //得到新的函数

Fn.bind(obj)();
-> Object {a: 1}               //执行结果 console.log(this);   this = obj

3.绑定参数

function add(x,y) { return x+y; }

var plus5 = add.bind(null, 5);   //把第一个参数给绑进去

plus5(10)     // 15      5+10 = 15

3.注意

bind每次运行都会产生新的函数,所以在用的时候要小心

element.addEventListener(‘click‘, Fn.bind(obj));        //在点击的时候,每次都会产生一个新的函数
element.removeEventListener(‘click‘, Fn.bind(obj));     //移除事件的时候就会无法取消绑定

//正确的方法
var listener = Fn.bind(obj);
element.addEventListener(‘click‘,listener );
element.removeEventListener(‘click‘, listener );

4.兼容

bind方法在ie8以下都不支持, 自定义bind如下

if(!(‘bind‘ in Function.prototype)){          //Function如果没有bind方法的话
   Function.prototype.bind = function(){      //Function原型添加bind
     var fn = this;            //
     var context = arguments[0];              //obj    第一个
     var args = Array.prototype.slice.call(arguments, 1);   //arg   去掉第一个的
     return function(){                       //返回一个新的fun
        return fn.apply(context, args);       // fn 上层的this    指的是引用bind的函数
     }
   }
}    
时间: 2024-11-04 12:17:27

js bind的相关文章

js bind方法的实现

Function.prototype.bind = function(){ var self = this, // 保存原函数 context = [].shift.call( arguments ), // 需要绑定的 this 上下文 args = [].slice.call( arguments ); // 剩余的参数转成数组 return function(){ // 返回一个新的函数 return self.apply( context, [].concat.call( args, [

Atitti.数据操作crud js sdk dataServiceV3设计说明

1. 增加数据1 1.1. 参数哦说明1 2. 查询数据1 2.1. 参数说明2 3. 更新数据2 3.1. 参数说明3 4. 删除3 1. 增加数据 importx("com.attilax/jsbridge/jsb_v7q329.js"); importx("com.attilax/dataService/dataServiceV3q41.js"); function page_load() { var ds3=new dataServiceV3(); ds3.

【技术分享】很详细的JS底层分析

1. 序言现在学的东西很容易忘记,写这篇文章的目的是能让我在需要时快速找回当时的感觉. 入门学习和参考手册建议翻阅JavaScript.The.Definitive.Guide.5th.Edition的附录(有电子版). 2. 准备设置服务器*.xml的MIME为text/xml ,Windows Xp自带的IIS的设置如下图 js_0000.png Firefox上有许多插件是开发必备的,用法大家Google,我列一下名称 FireBug Web Developer Toolbar Greas

2017、2018面试分享(js面试题记录)记得点赞分享哦;让更多的人看到~~

2017面试分享(js面试题记录) 1. 最简单的一道题 '11' * 2 'a8' * 3 var a = 2, b = 3; var c = a+++b; // c = 5 2. 一道this的问题 var num = 10; var obj = { num:8, inner: { num: 6, print: function () { console.log(this.num); } } } num = 888; obj.inner.print(); // 6 var fn = obj.

2018面试题记录

1. 最简单的一道题 '11' * 2 'a8' * 3 var a = 2, b = 3; var c = a+++b; // c = 5 2. 一道this的问题 var num = 10; var obj = { num:8, inner: { num: 6, print: function () { console.log(this.num); } } } num = 888; obj.inner.print(); // 6 var fn = obj.inner.print; fn();

react做的简单的购物车

###第一步 :首先电脑上已经安装react的脚手架 cnpm  install    create-react-app   -g ###第二步 :创建项目 creact-react-app   项目名(shopping) ###第三步:进入项目,看看项目是否可以正常运行 cd   shopping    ======> npm  start  或   cnpm   install   yarn   --save  后   yarn   start  ###第四步:创建两个文件夹App和shop

JS中的call、apply、bind方法

JS中的call.apply.bind方法 一.call()和apply()方法 1.方法定义call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj.

js 数组,字符串,JSON,bind, Name

/** * Created by W.J.Chang on 2014/5/23. */ // 判读是否是数组的方法 console.log(Array.isArray(new Array)); console.log(Array.isArray([])); var arr = [1,2,3]; // 遍历方法 arr.forEach(function (v){ console.log(v); }); console.log("---------------------"); // 过滤

使用call、apply和bind解决js中烦人的this,事件绑定时的this和传参问题

1.什么是this 在JavaScript中this可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式,this 绑定的对象即函数执行的上下文环境(context). 为了帮助理解,让我们来一起看一段代码: // 作为对象方法调用 var test = { a : 5, b : 6, sum : function () { return this.a + this.b; // 此处this = test } } alert(test.sum()); // 11 作为对象调用时thi