1. length属性
length代表函数定义时参数(形参)的个数。arguement.length代码实际传入参数(实参)的个数
2.prototype 属性
每个函数都包含一个prototype属性,它指向一个对象的应用,这个对象是原型对象。当将函数用作构造函数时,新创建的对象会从原型对象上继承属性和方法。
3. call() 和 apply()方法
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments.
4 bind()方法
它的主要作用是将函数绑定到某个对象。当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新的函数。(以函数调用方式)调用新的函数将会把原始的函数f()当做o的方法来调用,传入新函数的任何实参都将传入原始函数。
length代表函数定义时参数(形参)的个数。arguement.length代码实际传入参数(实参)的个数
function check(args){ var actual = args.length; var expected = args.callee.length; if(actual!==expected){ document.writeln('Execped ' + expected + ', got ' +actual); //throw Error('Execped ' + expected+ ', got ' +actual); //return 'Execped ' + expected+ ', got ' +actual; } } function add3(x,y,z){ check(arguments); return x+y+z; //再执行后面的逻辑 } add3(2,4,6,8); //=>Execped 3, got 4
2.prototype 属性
每个函数都包含一个prototype属性,它指向一个对象的应用,这个对象是原型对象。当将函数用作构造函数时,新创建的对象会从原型对象上继承属性和方法。
//使用prototype扩充Javascript的类 /*Javascript基于原型机制是动态的:对象从其原型继承属性,如果创建对象之后原型的属性发生改变,也会影响到继承这个原型的所有 实例。这意味这我们可以通过给原型添加新方法来扩充Javascript。*/ //这个方法用于去除字符串开头和结尾的空格 String.prototype.trim=String.prototype.trim || function(){ if(!this) return this; //空字符串不做处理 return this.replace(/^\s+|\s+$/g,''); }; Function.prototype.getName=function(){ //如果函数中有name属性就返回name的值,否则取'function'和'('之间的字符 return this.name || this.toString().match('/function\s*([^()*]\(')[1]; }; var ggg=' sggg '; document.writeln(ggg.trim()+ggg.trim()); //=> sgggsggg function funct(){}; document.writeln(funct.getName()); //=>funct
3. call() 和 apply()方法
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
//使用两个 call 就实现多重继承了 function bird(){ this.fly=function(){ document.writeln('fly...'); } } function human(){ this.speak=function(){ document.writeln('speak...'); } } function animal(){ bird.call(this); //将bird的方法放到this(此时代表animal)上执行 human.call(this); //将human的方法放到this(此时代表animal)上执行 } var niaoren =new animal(); niaoren.fly(); niaoren.speak(); //当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call 的用法。
说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments.
4 bind()方法
它的主要作用是将函数绑定到某个对象。当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新的函数。(以函数调用方式)调用新的函数将会把原始的函数f()当做o的方法来调用,传入新函数的任何实参都将传入原始函数。
function f(y){return this.x+y}; //待绑定的函数 var o={x:1}; //将要绑定的对象 var g=f.bind(o); document.writeln(g(2)); //=>3 //通过g(2)来调用o.f(2) //另一种绑定 function bind(f,o){ if(f.bind) return f.bind(o); //如果bind()存在,使用bind(); else return function(){ //否则这样绑定 return f.apply(o, arguments); }; }