`
zhangyaochun
  • 浏览: 2620477 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

underscore的Function之bind

 
阅读更多

 

   bind

 

   _.bind(function,context)

 

 

  • 给一个object绑定一个function,任何时候调用方法,this都指向这个object

 

  官方例子:

 

var func = function(greeting){
      return greeting + ":" + this.name;
}

func = _.bind(func,{name:"moe"},"hi");

func();   // "hi : moe"

 

 

   源码:

 

var ctor = function(){};

//ECMA 5支持的
var nativeBind = Function.prototype.bind,
    slice = Array.prototype.slice;


_.bind = function(func,context){

      var args,

            bound;

     //如果原生支持,就采用原生的bind
     if(func.bind === nativeBind && nativeBind){

            return nativeBind.apply(func,slice.call(arguments,1));

     }


     //对func的类型进行判断,非function就抛异常
     if(!_.isFunction(func)){
 
           throw new TypeError;
 
     }

     //第3个参数转换成数组
     args = slice.call(arguments,2);

     return bound = function(){

            //判断当前this是否是function的实例
            if(!(this instanceof bound)){

                   return func.apply(context,args,concat(slice.call(arguments)));
        
            }

            //保证this为func的实例
            ctor.prototype = func.prototype;
            var self = new ctor;

            ctor.prototype = null;

            var result = func.apply(self,args.concat(slice.call(arguments)));


            //判断result是不是Object
            if(Object(result) === result){
                     return result;
            }

            return self;

    };


};

 

分享到:
评论

相关推荐

    underscore之function_动力节点Java学院整理

    本篇文章将深入探讨Underscore中的`function`相关功能,包括`bind`、`partial`和`memoize`。 首先,我们来看`bind`方法。`bind`的主要作用是改变函数的`this`上下文,允许我们将一个函数与特定的对象绑定,确保在...

    backbone.js underscore.js

    在实际项目中,Backbone.js依赖于Underscore.js,因为Backbone的一些功能如事件系统和模板引擎就构建在Underscore.js之上。同时,jQuery-1.10.2.js作为基础库,提供了DOM操作和Ajax请求的支持,使得开发者可以方便地...

    underscore.rar

    - `_.isString`, `_.isNumber`, `_.isBoolean`, `_.isFunction`等:检查值的类型。 8. **实用工具**: - `_.identity`: 函数返回其输入的值,常用于`_.map`等函数的回调。 - `_.noop`: 无操作的空函数。 - `_....

    underscore-basic-tutorial:underscore.js的基础教程

    Underscore.js是一个轻量级的JavaScript库,它提供了一系列实用的功能,用于处理数组、对象、函数等,为开发人员提供了便利的工具集。在这个基础教程中,我们将深入理解Underscore.js的核心概念和常用方法。 一、...

    How-underscore-works:展示 Underscore.js 可以做什么

    2. **函数辅助**:Underscore 提供了 bind、partial、compose 等函数,用于函数绑定、部分应用和函数组合。这些工具能帮助开发者更好地组织和抽象代码逻辑。 3. **对象操作**:Underscore 包含 has、keys、values、...

    underscore-example:Underscore.js 演示

    3. **函数编程**:Underscore.js支持函数编程,如`_.bind`用于绑定函数的上下文,`_.compose`用于组合函数,`_.after`用于定义在调用指定次数后执行的函数,以及`_.once`确保函数只执行一次。 4. **实用工具**:...

    深入解析Backbone.js框架的依赖库Underscore.js的作用

    - **功能函数类**:包括`bind`, `partial`, `memoize`, `delay`, `defer`, `throttle`, `debounce`, `wrap`等,用于函数操作和优化。 - **对象类**:提供了`keys`, `values`, `pairs`, `invert`, `pick`, `omit`, `...

    underscore.js:underscore.js原始解析-源码解析

    除了这些基本工具,underscore.js还包含了一些高级功能,如函数绑定`_.bind`、延迟执行`_.defer`、节流控制`_.throttle`等。这些函数在处理事件、异步操作和性能优化时显得尤为关键。例如,`_.throttle`可以限制函数...

    underscore-revised:underscore.js 在我的代码版本中被重写

    2. **函数编程**:underscore.js包含`_.bind()`、`_.compose()`、`_.curry()`等函数,它们是函数式编程的重要组成部分。重写这些函数,开发者需熟悉JavaScript的闭包、函数参数及作用域概念,以及如何通过`Function....

    数据双向绑定库brix-bisheng.zip

     var bs = BiSheng.bind(data, tpl, function(content){ // 然后在回调函数中将绑定后的 DOM 元素插入文档中  $('div.container').append(content)  }); // 改变数据 data.title,对应的文档区域会...

    JavaScript面向对象框架dejavu.js.zip

     setTimeout(this._logName.$bind(this), 1000);  },  // public method (follows the same visibility logic, in this case  // with no underscore)  getName: function () {  ...

    Backbone.js的Hello World程序实例.docx

    this.bind('change', this.render); this.model = this.options.model; }, render: function() { $(this.el).html(Mustache.to_html($(this.el).template, this.model.toJSON())); return this; } }); ``` ...

    jQuery移除元素自动解绑事件实现思路及代码

    define(['jquery', 'underscore'], function ($) { var bindDirects = ['delegate', 'bind', 'on', 'hover', 'blur', 'change', 'click', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', '...

    Backbone.js的Hello World程序实例

    this.bind('change', this.render); this.model = this.options.model; }, render: function() { $(this.el).html(Mustache.to_html($(this.el).template, this.model.toJSON())); return this; } }); ``` 4...

    prototype1.4中文手册

    - **对 Function 扩展**:增加了 `bind`, `bindAsEventListener`, `defer`, `delay` 等方法。 - **对 String 的扩展**:添加了 `interpolate`, `traverse`, `gsub`, `gsub!`, `split`, `camelize`, `capitalize`, `...

    Backbone.js框架中Model与Collection的使用实例

    this.bind("change:name", function(){ var name = this.get("name"); alert("你改变了name属性为:" + name); }); }, defaults: { name: '张三', age: 38 } }); var man = new Man(); man.set({ name: '...

Global site tag (gtag.js) - Google Analytics