javascript-underscore.js的bind函数

问题描述

underscore.js的bind函数

先贴代码:
var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
if (!(callingContext instanceof boundFunc))
return sourceFunc.apply(context, args);
var self = baseCreate(sourceFunc.prototype);
var result = sourceFunc.apply(self, args);
if (_.isObject(result))
return result;
return self;
};

// Create a function bound to a given object (assigning this, and arguments,
// optionally). Delegates to ECMAScript 5's native Function.bind if
// available.
.bind = function(func, context) {
if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
if (!
.isFunction(func)) throw new TypeError('Bind must be called on a function');
var args = slice.call(arguments, 2);
var bound = function() {
return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
};
return bound;
};
想问下,executeBound(func, bound, context, this, args.concat(slice.call(arguments)))这个里面的this是否就是指代调用_.bound的对象,然后后面为何要做(!(callingContext instanceof boundFunc))这个判断,网上查了好久,没查出来,请高手指导下,非常感谢

解决方案

这个得看如何调用的,因为this对象可以通过call和apply进行更改,如果不是通过apply或者call执行调用的,那么就是指向bound的实例对象了

instanceof是判断对象是否属于某一类型。如果你不判断,可能会出错。因为要调用这个类型的方法,不是这个类型的实例可能方法不存在而出错

http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/

时间: 2024-07-29 00:07:11

javascript-underscore.js的bind函数的相关文章

javascript中call,apply,bind函数用法示例_javascript技巧

本文实例讲述了javascript中call,apply,bind函数用法.分享给大家供大家参考,具体如下: 一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 var Dog=function(){ this.name="汪星人"; this.shout=function(){ alert(this.name); } }; var Cat=function(){ this.name=&qu

关于原生js中bind函数的简单实现_javascript技巧

今天继续研究了bind函数的实现,也知道了shim和polyfill的说法,现在总结一下, if (!Function.prototype.bind) { Function.prototype.bind = function (oThis) { if (typeof this !== "function") { // closest thing possible to the ECMAScript 5 internal IsCallable function throw new Typ

javascript中bind函数的作用实例介绍_javascript技巧

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> button {background-color:#0f0;} </style> </head> <body> <button id="button"> 按钮 </button> <input type="tex

Underscore.js常用方法总结

 这篇文章主要介绍了Underscore.js常用方法总结,本文讲解了Underscore.js概述.在node.js下安装.与集合有关的方法.与对象有关的方法.与函数相关的方法等内容,需要的朋友可以参考下     概述 Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,大大方便了Javascript的编程.MVC框架backbone.js就是基于这个库. 它定义了一个下划线(_)对象,函数库的所有方法都属于这个对象.这些方法大致上可以分成:集合(co

Underscore.js使用

Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象. 他解决了这个问题:"如果我面对一个空白的 HTML 页面,并希望立即开始工作,我需要什么?" 他弥补了 jQuery 没有实现的功能,同时又是 Backbone 必不可少的部分. Underscore 提供了100多个函数,包括常用的:map.filter.invoke - 当然还有更多专业的辅助函数,如:函数绑定.JavaScript 模

Underscore.js 1.3.3 源码分析收藏

Underscore是一个提供许多函数编程功能的库,里面包含了你期待(在Prototype.js和Ruby中)的许多功能.但是没有扩展任何内置的Javascript对象,也就是说它没有扩展任何内置对象的原型.它被定位为jQuery和Backbone.js的基础层 源码注释转之网上他人之备注,特收藏以后方便阅读. // Underscore.js 1.3.3 // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. // Underscore is

Underscore.js 1.3.3 中文注释翻译说明_基础知识

// Underscore.js 1.3.3 // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. // Underscore is freely distributable under the MIT license. // Portions of Underscore are inspired or borrowed from Prototype, // Oliver Steele's Functional, and John Resig'

深入解析Backbone.js框架的依赖库Underscore.js的作用_基础知识

backbone必须依赖underscore.js才能够使用,它必须通过underscore中的函数来完成访问页面元素.处理元素的基本操作. 注:backbone可以很好的与其它js库一起工作,所以说它是一个库,而不是框架. Underscore并没有对原生对象进行扩展,而是调用_()方法进行封装,一旦封装完成,js对象就变为Underscore对象,也可以通过Underscore对象的Value()方法获取原生js对象中的数据.(jquery通过$()方法得到Jquery对象) Undersc

微信小程序使用第三方库Underscore.js步骤详解_javascript技巧

前言 Underscore.js是一个很精干的库,压缩后只有4KB.Underscore 提供了100多个函数,包括常用的:map.filter.invoke - 当然还有更多专业的辅助函数,如:函数绑定.JavaScript 模板功能.创建快速索引.强类型相等测试等等.弥补了标准库的不足,大大方便了JavaScript的编程. 微信小程序无法直接使用require( 'underscore.js' )进行调用. 微信小程序模块化机制 微信小程序运行环境支持CommoJS模块化,通过module