标签:
函数是js中特殊的对象,可以拥有属性。
funcation.length属性:代表形参的长度,只读属性,不允许更改
arguments.length代表的是实参长度
prototype属性:每个函数都有一个prototype属性,当把函数当做构造函数时,新创建的对象会从原型对象上继承属性。
与其他语言不同,ECMAScript函数不介意传递进来多少个参数,也不在乎是什么类型。因为实参在内部是用一个类数组来表示的,函数接收到的始终是个类数组。
命名参数(形参)只提供便利,但不是必须的。
注意:js中方法本身是没有重载的,因为:
1.方法的本质就是一个Function类型的变量,如果出现同名的变量,会覆盖!
2.但是依靠函数内部属性argument来模拟重载!
//模拟函数重载!
function testArgument() { if (arguments.length == 1) { alert("哈哈~1"+arguments[0]); } else if (arguments.length == 2) { alert("哈哈~2" + arguments[0] + "," + arguments[1]); } else { alert("哈哈~3"); } } testArgument(); testArgument(1); testArgument(1, 2);
prototype 是保存某个对象【所有实例】【共享属性】的地方。就是说,比如toString()和valueOf()等方法实际上都保存在prototype名下,只不过通过各自对象的实例访问罢了。
在创建自定义引用类型及实现继承时,prototype属性的作用是极为重要的。
call()和apply()方法:看作是某个对象的方法,通过调用方法的形式来间接调用函数。
第一个参数是要调用函数的母对象,即调用上下文。在函数体内通过this获得对他的引用。
f.call(o); f.apply(o); 等价于 o.m = f(); o.m(); delete o.m;
ES5中第一个实参都会变成this的值,哪怕传入null和undefined。
ES3和非严格模式中,传入null和undefined会被全局对象替换,而其他原始值会被其他相应的包装对象替代。
bind()方法:ES5中新增加方法,主要作用是将函数绑定至某个对象。
当函数f()上调用bind()方法传入对象o时,这个方法将返回一个新的函数,调用新的函数时会当做o的方法进行调用。
Function()构造函数
Function()构造函数可以传入任意数量的字符串实参,最后一个实参所表示的文本就是函数体。
函数是可调用对象。所有的函数都是可调用的,但是并非所有的可调用对象都是函数。
可调用对象在两个JavaScript实现中不能算作函数。window.alert()和document.getElelmentById()使用了可调用的宿主对象但是本质上不是function对象。
RegExp对象。判断一个对象是否为函数和isArray类似。
[javascript] view plaincopy function isFunction(x){ return Object.prototype.toString.call(x) === "[object Function]"; }
JavaScript基础学习之-JavaScript权威指南--8.7函数属性方法构造函数
标签:
原文地址:http://www.cnblogs.com/x739400043/p/4732106.html