jQuery prototype
根据这个StackOverflow回答jQuery.fn是什么意思?,
那么我的问题是,例如,如果$ .fn.tweets使用原型来创建推文方法,那么
1 2 3 4 | var $tweets = $('#tweets').tweets({ query: buildQuery(approxLocation), template: '#tweet-template' }); |
如果是这样,它将如何触发该方法。 例如,仅仅在文件加载上创建变量是否会触发该函数,其中包含其他方法,即查询? 谢谢你的帮助
完整的方法代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | $.fn.map = function(method) { console.trace(); console.log(method); if (method == 'getInstance') { console.log("fn.map"); return this.data('map'); } return this.each(function() { var $this = $(this); var map = $this.data('map'); if (map && MyMap.prototype[method]) { map[method] (Array.prototype.slice.call( arguments, 1 )); } else if ( typeof method === 'object' || ! method ) { var options = method; $this.data('map', new MyMap( this, options )); } else { $.error( 'Method ' + method + ' does not exist on jQuery.map' ); } }); } $.fn.tweets = function(method) { if ( methods[method] ) { return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); } else if ( typeof method === 'object' || ! method ) { return methods.init.apply( this, arguments ); } else { $.error( 'Method ' + method + ' does not exist on jQuery.tweets' ); } } |
调用这些方法的变量?
1 2 3 4 5 6 7 8 9 10 11 | var $tweets = $('#tweets').tweets({ query: buildQuery(approxLocation), template: '#tweet-template' }); var $map = $('#map').map({ initialLocation: approxLocation, radius: 1000, locationChanged: function(location) { $tweets.tweets('setQuery', buildQuery(location)); } }); |
首先,原型只是对象。 在这种情况下,是的:
1 | jQuery.prototype === jQuery.fn |
所以说
当您使用
1 2 3 4 5 6 7 8 9 | var A = function() { }; A.prototype.doThing = function() { }; var newObj = new A(); newObj.doThing // this new object has this method because it's on A's prototype |
所以
也可以随意阅读jQuery的源代码并跟踪创建新对象时发生的情况。 您可以在评论