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`相关功能,包括`bind`、`partial`和`memoize`。 首先,我们来看`bind`方法。`bind`的主要作用是改变函数的`this`上下文,允许我们将一个函数与特定的对象绑定,确保在...
在实际项目中,Backbone.js依赖于Underscore.js,因为Backbone的一些功能如事件系统和模板引擎就构建在Underscore.js之上。同时,jQuery-1.10.2.js作为基础库,提供了DOM操作和Ajax请求的支持,使得开发者可以方便地...
- `_.isString`, `_.isNumber`, `_.isBoolean`, `_.isFunction`等:检查值的类型。 8. **实用工具**: - `_.identity`: 函数返回其输入的值,常用于`_.map`等函数的回调。 - `_.noop`: 无操作的空函数。 - `_....
Underscore.js是一个轻量级的JavaScript库,它提供了一系列实用的功能,用于处理数组、对象、函数等,为开发人员提供了便利的工具集。在这个基础教程中,我们将深入理解Underscore.js的核心概念和常用方法。 一、...
2. **函数辅助**:Underscore 提供了 bind、partial、compose 等函数,用于函数绑定、部分应用和函数组合。这些工具能帮助开发者更好地组织和抽象代码逻辑。 3. **对象操作**:Underscore 包含 has、keys、values、...
3. **函数编程**:Underscore.js支持函数编程,如`_.bind`用于绑定函数的上下文,`_.compose`用于组合函数,`_.after`用于定义在调用指定次数后执行的函数,以及`_.once`确保函数只执行一次。 4. **实用工具**:...
- **功能函数类**:包括`bind`, `partial`, `memoize`, `delay`, `defer`, `throttle`, `debounce`, `wrap`等,用于函数操作和优化。 - **对象类**:提供了`keys`, `values`, `pairs`, `invert`, `pick`, `omit`, `...
除了这些基本工具,underscore.js还包含了一些高级功能,如函数绑定`_.bind`、延迟执行`_.defer`、节流控制`_.throttle`等。这些函数在处理事件、异步操作和性能优化时显得尤为关键。例如,`_.throttle`可以限制函数...
2. **函数编程**:underscore.js包含`_.bind()`、`_.compose()`、`_.curry()`等函数,它们是函数式编程的重要组成部分。重写这些函数,开发者需熟悉JavaScript的闭包、函数参数及作用域概念,以及如何通过`Function....
var bs = BiSheng.bind(data, tpl, function(content){ // 然后在回调函数中将绑定后的 DOM 元素插入文档中 $('div.container').append(content) }); // 改变数据 data.title,对应的文档区域会...
setTimeout(this._logName.$bind(this), 1000); }, // public method (follows the same visibility logic, in this case // with no underscore) getName: function () { ...
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; } }); ``` ...
define(['jquery', 'underscore'], function ($) { var bindDirects = ['delegate', 'bind', 'on', 'hover', 'blur', 'change', 'click', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', '...
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...
- **对 Function 扩展**:增加了 `bind`, `bindAsEventListener`, `defer`, `delay` 等方法。 - **对 String 的扩展**:添加了 `interpolate`, `traverse`, `gsub`, `gsub!`, `split`, `camelize`, `capitalize`, `...
this.bind("change:name", function(){ var name = this.get("name"); alert("你改变了name属性为:" + name); }); }, defaults: { name: '张三', age: 38 } }); var man = new Man(); man.set({ name: '...