bootstrap-typeahead.js上下文中的jquery.proxy

时间:2012-08-28 16:44:04

标签: javascript jquery twitter-bootstrap

我正在阅读以下代码行

  items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source

来自bootstrap-typeahead.js v2.1.0

有人可以解释我吗 this.source(this.query, $.proxy(this.process, this))如何运作?

肯定:
1)我认为this.source是指(1)中的函数定义,然后是


(1)

    element.typeahead({
        minLength: 3,
        source: function () {
             // some code
        }
    });

1 个答案:

答案 0 :(得分:1)

制止它:items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source;

所以Object有一个名为source的属性,this.source看起来this.source可能是一个数组或一个函数。它们谓词函数$.isFunction(this.source)接受一个Object,如果它是一个函数,则返回true。如果它是一个函数this.source(this.query, $.proxy(this.process, this))将被执行。

现在要取消this.source(this.query, $.proxy(this.process, this))来电。

我们从$.isFunction(this.source)调用的结果中知道this.source是一个函数,它需要2个参数。第一个,我猜的this.query是一个字符串。第二个,$.proxy(this.process, this))是回调函数。 $.proxy接受两个参数,一个Function和一个Object / context,并返回一个新函数。返回的函数上下文(this)确保在Object / context中传递。

$.proxy看起来像这样

var proxy = function( func, context ) {
    return ( function() {
        func.apply( context, arguments );
    });
};

//build a new function and set this to window
var newFunction = proxy( someOrtherFunction, window );

//use the new function
newFunction();

您可以在此处详细了解$.proxyhttp://api.jquery.com/jQuery.proxy/

$.proxy(this.process, this)生成的新创建的函数在this.source函数中用作回调。