JS 函数总结

函数的定义

(1) 函数的声明:
function add(x, y) {
	return x + y;
}

(2)函数表达式
var add = function (i, j) {
	reutrn i + j;
}

(3)对象实例化(实际编程一般不会用),定义在全局。
var add = new Function (‘i‘, ‘j‘, "return (i + j)");

函数的属性:
  prototype:add
  constructor:function add(i, j)
  __proto__ : Object, 来自于实例初始化的prototype

构造函数:
prototype是函数的专利,只有函数才有prototype属性。
构造函数与普通函数的区别
(1)本质上没有什么区别。
(2)构造函数通常会有this指定实例属性,原型对象上面通常有一些公用方法
(3)构造函数命名通常第一个字母大写。

函数的调用
(1)构造函数调用模式
  var person1 = new Person(‘hg‘);
  var person2 = new Person(‘wj‘);

(2)方法调用模式,就是调用对象的方法
  person1.say();

(3)函数调用模式

例子(1)
    function aaa() {
        this.a = 1;
        alert(this + "  aaa  " + this.a);
        function bbb() {
            alert(this + "  bbb  " + this.a);
        }
        bbb();
    }

	//这里都可以弹出1. 因为 this.a = 1, 这个this == window。所以a挂在window上面了。
    aaa();		//注意:两个this指向的都是window。

例子(2)
    //获取对象构造函数名称
    function type(obj) {
        return obj && obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1];
    }

    function AAA() {
        this.aa = 1;
        alert(this + "  aaa  " + this.aa);
        this.bbb = function () {
            alert(type(this));		//AAA
            alert(this + "  bbb  " + this.aa);
        }
    }

    var A = new AAA();		//[object Object]  aaa  1
    A.bbb();				//[object Object]  bbb  1
    alert(window.A.aa);		//1
    alert(window.aa);		//undefined

例子(3)

    //获取对象构造函数名称
    function type(obj) {
        return obj && obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1];
    }

    function AAA() {
        this.aa = 1;
        alert(this + "  aaa  " + this.aa);
        function bbb() {
            alert(type(this));      //Window
            alert(this + "  bbb  " + this.aa);
        }
        bbb();      //[object Window]  bbb  undefined
    }

    var A = new AAA();  //[object Object]  aaa  1
    // A.bbb(); 无法调用,因为是bbb局部函数,
    alert(window.A.aa);     //1
    alert(window.aa);       //undefined

(4)apply,call调用模式

Function.prototype.apply;
apply是函数上面的方法。所有的函数都可以调用这个方法。

如果获取一个对象类型的函数:
  Object.prototype.toString.apply(obj);

  Object.prototype.toString.apply(1234); //number

apply是一个借用的功能。

  A.apply(B, args); // B函数-->>借用-->>A函数. 操作参数args。

  call(this, x, y); //call 后面的参数,分开传入,apply传入的是一个数组。

(5) bind方法!!!
var test = B.bind(A, argus);
test();
bind绑定了对象和参数。返回一个函数,需要的时候,执行就好了。

二,arguments

(1) Array-like
只是长得像数组,但不是数组,可以有arguments[index]
和arguments.length的方法,但其他数组方式无法使用。

function test(x, y, z) {
  alert(type(arguments));  //object
  var args = Array.prototype.slice.apply(arguments);
  alert(type(args));     //Array
}

test(1,3,4,5,6);
弹出: 第一个是Object对象,第二个是Array数组。

用这个把参数给转换为数组,也可以。
var args = Array.prototype.slice.apply(arguments);

(2) arguments.callee
指向函数本身. arguments.callee();调用函数本身。
进行递归的方式。

	var hga = 3;
	function test(a) {
	    if (a != 0) {
	        alert(a);
	        a--;
	    }
	    else {
	        return ;
	    }

	    arguments.callee(a);
	}
	test(hga);

三,递归 

不用arguments.callee();就要防止,函数名被篡改。

四,闭包:在函数中定义函数,而被定义的函数,调用了父函数中的变量。

(function() {
	var a = 0;
	function b() {
		a = 1;
		debugger;
	}
})();

闭包的使用场景:改变作用域,将函数的变量,变为私有变量。

 后期会专门写一篇关于闭包的问题。

五,First-class function.

  JS的函数,可以作为变量保存,可以作为参数传递,可以作为返回值返回。

(1)函数颗粒化。
	比如实现一个add(num1)(num2)(num3);的这种作用链调用的函数。
一个不定量,累加的。回调。

	function add(value) {

		var helper =  function (next) {
			value = typeof(value) === ‘undefined‘ ? value : value + next;
			return helper;
		}

		helper.valueOf = function () {
			return value;
		}

		return helper;
	}

	console.log(add(1)(2)(3));

//实现方式是,首先在函数内定义一个函数,helper,判断传入的参数是否是undefined.
//如果是,value值就不变,如果不是,就更新value值。
//函数返回的是一个helper的函数。

(2)回调,做异步回调

在ajax中,在success返回成功时,做function()

//封装了一个ajax的异步调用。
	function ajax.get(url, callback) {

		var createXHR = function () {
			var xhr;
			if (window.XMLHttpRequest) {
				xhr = new XMLHttpRequest();
			}
			else if (window.ActiveXObject) {
				xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);
			}
			return xhr;
		}
		var xhr = createXHR();
		if (xhr) {
			xhr.open(‘get‘, url, true);
			xhr.onreadystatechange = function () {
				if (xhr.readyState == 4) {
					if (xhr.status == 200) {
						callback.success(xhr);
					}
					else {
						callback.fail(xhr);
					}
				}
			}

			xhr.send(null);
		}

	}
时间: 2024-10-23 20:48:16

JS 函数总结的相关文章

JS函数大全 莫名其妙找到的

1 .document.write(""); 输出语句 2 .JS中的注释为// 3 .传统的HTML文档顺序是:document->html->(head,body) 4 .一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document) 5 .得到表单中元素的名称和值:document.getElementById("表单中元素的ID号").name(或value) 6 .

JSF页面中使用js函数回调后台bean方法并获取返回值的方法

由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的,很可能会误导使用者. 相对来说,看国内的那些仅仅是翻译过来的文章或书籍不如直接看国外的官方文档或资料来的实在,在我讲述jsf页面中如何使用js调用后台bean方法之前,先给大家说几个国外的资料.在primefaces官方网站上,你可以搜索到几乎所有你需要的东西,primefaces官网为:http:

webBrowser调用外部js文件和js函数(转载)

原文链接:http://fy5388.blog.163.com/blog/static/56499537201012594314130/ webBrowser调用外部js文件和js函数 '第一种方法:webbrowser动态调用html和js代码,都是动态的:代码示例: webBrowser1.Navigate("about:blank");webBrowser1.Document.OpenNew(True);webBrowser1.Document.Write("<H

JavaScript入门:006—JS函数的定义

JS函数的声明.声明函数的格式如下: function 函数名(参数列表){ //函数语句: return 返回值; } 来看具体的函数声明.1.普通函数 <script type="text/javascript"> function ShowHint() { alert("普通函数"); } </script> 2.带参数的函数 <script type="text/javascript"> functio

一个奇怪的JS函数

今天在分析一个jQuery插件源码的时候,发现了一个奇怪的函数. // add leading zeros var pad = function(x){return (1e15+""+x).slice(-2)}; 首先1e15是什么意思? 也不是十六进制表示法. 不管三七21,直接F12打开命令窗口,执行下看看,结果是1后面有15个0. 原来1e15是科学计数法,表示1乘以10的15次方. var y=123e5; // 12300000 var z=123e-5; // 0.0012

Button的Click事件与js函数的两种不同顺序触发方式

先执行js,或者先执行Click事件,最近就遇到了这个问题,开始弄了两个按钮分别执行,那才叫一个蛋疼... 1.先执行js,再执行Button的Click函数 <asp:Button ID="btn_delete" runat="server" Text="提交" onclick="button1_Click"/> 前台js为 <script language="javascript"&g

点击按钮(或超链接)如何跳转到另外一个页面并执行目标页面的js函数

页面跳转同时执行js代码$(function(){});url参数传递 标题的前半部分其实不必赘述,按钮也可以换成超链接.. 假设是需要在A页面上的一个按钮,点击后跳转到B页面,传一些参数后且并B页面的某个js函数可以执行~~ 关键在于如何跳转到目标页面之后并「接着」执行「目标页面的js函数」.原因是目标页面的某个js函数原来是需要点击该页面的按钮或超链接才能触发的,但现在需要在跳转到B页面后立即执行! 先不想是从A页面跳转到B页面,假设你想在B页面一打开就执行的话,是需要把代码逻辑写在$(fu

C#调用htmlfile组件,并执行js函数

前一篇我测试了vba调用htmlfile做反混淆,并执行js函数的代码.本文换成C#实现. 本文地址:http://www.cnblogs.com/Charltsing/p/CSharpEval.html 联系QQ:564955427 C#调用com组件需要使用CreateInstance,当然,我们也可以通过反编译vb.net里面的CreatObject来修改成C#代码.我从网上下载了一个 [SecurityPermission(SecurityAction.Demand, Unmanaged

ASP.NET后台调用前台JS函数的三种常见方法

第一种:使用普通的添加控件中的Attributes属性进行调用 例如,像一般的普通的按钮:Button1.Attributes.Add("onclick","MyFun();"); 此方法只能在Onload中或者类似于onload的初始化过程中添加才有效.并且是先执行脚本函数,同时无法改变执行顺序. 第二种:使用Response.Write方法进行调用 例如,像我们经常会使用到的Response.Write("<scripttype='text/ja

js 函数的陷阱

function test(){ return "hello"; } alert(test);这个显示是变量test的值,它正好是个函数,这是第一个警告对话框显示的结果: function test(){ return "hello"; } alert(test()): 圆括号()告诉它执行函数test,并显示它的返回值,就像下面这样: hello: function addInput(name,value){ do something; } alert(addIn