这篇来针对俩个问题 进行现阶段总结
1) prototype 是什么玩意
我认为 prototype 原型~ 就是实现共用 参数或者 默认参数 可以用
举个栗子
在举个array 栗子 并换了一个姿势
2)Function 什么时候用new 什么时候不用?(个人的一些理解)
因为JAVAscript里没有类和方法的概念 统一为Function来实现 所以 New一个函数 和直接调用函数 就是方法与类的区别 比如
我们想象下面是一个类
方法:
加上return 之后 马上就有方法的感觉~ 定义了一个方法体 返回参数 age
function 就暂时就这么理解
引用一句话:(别蒙 就是留着以后深入思考的时候拿来提示 知道就行了)
如果函数返回值为常规意义上的值类型(Number、String、Boolean)时,new函数将会返回一个该函数的实例对象,
而如果函数返回一个引用类型(Object、Array、Function),则new函数与直接调用函数产生的结果等同
3)理解fuction面对对象 的话 一定会接触call和apply 在这里一起解释
call和apply
Function的方法 功能是一样的 不过参数不同
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:这个对象将代替Function类里this对象
params:这个是一个参数列表
举个栗子
从 ____chen的博客里抄来的 本家姓 一样的优秀
分析: Person.apply(this,arguments);
this:在创建对象在这个时候代表的是student
arguments:是一个数组,也就是[“zhangsan”,”21”,”一年级”];
也就是通俗一点讲就是:用student去执行Person这个类里面的内容,在Person这个类里面存在this.name等之类的语句,这样就将属性创建到了student对象里面
2. call示例
在Studen函数里面可以将apply中修改成如下:
Person.call(this,name,age);
这样就ok了
3. 什么情况下用apply,什么情况下用call
在给对象参数的情况下,如果参数的形式是数组的时候,
比如apply示例里面传递了参数arguments,这个参数是数组类型,并且在调用Person的时候参数的列表是对应一致的(也就是Person和Student的参数列表前两位是一致的) 就可以采用 apply ,
如果我的Person的参数列表是这样的(age,name),而Student的参数列表是(name,age,grade),
这样就可以用call来实现了,也就是直接指定参数列表对应值的位置(Person.call(this,age,name,grade));