JS参数可以少传吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS参数可以少传吗?相关的知识,希望对你有一定的参考价值。
参考技术A 当函数中用不到第三个参数的时候可以只传两个参数但是当一个函数有3个参数,而调用这个函数的时候只给它传两个参数时,第三个参数的值默认为undefined
ajax封装
周日在家封装了ajax简单的函数。
1、封装extand方法
模仿(抄袭)jQuery源码的$.extend方法,可以在使用ajax时候少传一些参数。
Function.prototype.method = function(name, func) { this.prototype[name] = func; return this; }; var $ = function() { } .method(‘extend‘, function() { var options, name, copy, target = {}, i = 1, length = arguments.length; for ( ; i < length; i++ ) { options = arguments[i]; for ( name in options ) { copy = options[name]; target[name] = copy; }; } return target; })
2、有了extend方法之后,就是ajax方法了
......... .method(‘ajax‘, function(opts) { var xhr = new XMLHttpRequest(), self = this, ajaxSettings = { url: location.href, type: "GET", async: true, contentType: "application/x-www-form-urlencoded", data: null }, ajaxOpts = this.extend({}, ajaxSettings, opts), success = ajaxOpts.success; xhr.onreadystatechange = function() { if(xhr.readyState === 4 && xhr.status === 200) { var res = JSON.parse(xhr.responseText); if(res.success) { data = res.data || {}; success && success.call(self, data); } } }; xhr.open(ajaxOpts.type, ajaxOpts.url, !!ajaxOpts.async); xhr.setRequestHeader("Content-type", ajaxOpts.contentType); xhr.send(JSON.stringify(ajaxOpts.data)); return this; })
这样的话,ajax方法就已经封装好了。
但是有一些问题,现在angular,jQuery 都支持$ajax().success 或者 $ajax().done的连缀写法,我至今还没想好怎么实现,难道是用ES6的promise函数吗??>
以上是关于JS参数可以少传吗?的主要内容,如果未能解决你的问题,请参考以下文章