javascript闭包,arguments和prototype

prototype

javascript中一切皆对象,并且对象的属性和方法可以任意添加,例如:

var obj=function(){};

obj.name="jack";

但是下面的代码就有问题了

var obj2=new obj;

alert(obj2.name);//输出undefined因为name属性为obj对象所独有

如果想要使新建对象继承某些属性和方法,就需要对对象原型进行扩展,prototype也正是这个意思:

obj.prototype.name=null;

var obj2=new obj;

alert(obj2.name)

这样就OK了。

note:只有函数对象才有prototype,var obj={};然后obj.prototype.xxx=null这样是不可以的,利用this.property也可以给对象的实例来增加属性;prototype默认的是会自带一个属性constructor其实就是对应了函数本身。

闭包

意思是函数可以使用函数之外的变量,这再正常不过了,但是在函数中包含函数的情况下,需要稍加注意:

function add(i)

{

return function(){return ++i;}

}

add(2)();//输出3,这说明,add函数返回了一个函数对象,这个函数对象携带了i的值以备后面使用,i或许会放在对象的隐藏对象arguments里

arguments

javascript里面没有函数重载,但是可以通过arguments来实现类似功能

只不过要在函数体里面进行类型或者数量的判断以执行相对应的操作