Open yooocen opened 7 years ago
我们已经知道了apply(thisArg,[arg1,arg2,...])的基本使用方法,这里再简单介绍一下:
apply的主要作用是将一个方法(method)传递给一些对象使用,假设有好几个对象都需要用到同一种方法,那么这个方法就只需要写一次就可以了,然后使用这种模拟继承的方式,所有相关的对象就可以直接调用这个方法(method),作用就像这些对象继承了这个方法一样
以下代码是apply的一个高级用法,模拟new方法构建(construct)一个新对象 包括三个对象:Function.prototype.construct、f、object
Function.prototype.construct = function(args){ var newObject = Object.create(this.prototype);//相当于new this.apply(newObject,args); return newObject; } var f = function(){ for(var i =0;i<arguments.length;i++){ this['property'+i] = arguments[i]; } } var array = ["a",1,"nihao"]; var object = f.construct(array); console.log(object.property2);
只要理解了它们中的 this 的具体的指代的话,这段代码也就非常好理解
Function.prototype.construct中的 this,指的就是调用construct的对象,那么由于这个construct是挂在Function的原型上面的,所以也就是说,所有的函数都会带有这个construct属性(方法),那么能够调用它的自然就是下面的f函数对象
f中的 this 当然也是调用f的对象,而这个f的功能就是用传给f的参数构建出这个对象的一些属性,这些属性的值就是这些参数的值
那么调用f的对象又是从何而来呢?答案是从Function.prototype.construct中生成的,细读代码可以发现,这个construct中使用了f的原型来构建了一个新对象newObject,然后这个newObject使用apply方法调用f,再利用f给自己增加属性,所以这个调用f的对象也就是这个利用f的原型构造的newObject,这种方式和new出一个新对象的思路是一致,也是apply方法能做到的一个很有意思的点
Function.prototype.apply()
简单的回顾
我们已经知道了apply(thisArg,[arg1,arg2,...])的基本使用方法,这里再简单介绍一下:
apply的主要作用是将一个方法(method)传递给一些对象使用,假设有好几个对象都需要用到同一种方法,那么这个方法就只需要写一次就可以了,然后使用这种模拟继承的方式,所有相关的对象就可以直接调用这个方法(method),作用就像这些对象继承了这个方法一样
高级用法
以下代码是apply的一个高级用法,模拟new方法构建(construct)一个新对象 包括三个对象:Function.prototype.construct、f、object
只要理解了它们中的 this 的具体的指代的话,这段代码也就非常好理解
Function.prototype.construct中的 this,指的就是调用construct的对象,那么由于这个construct是挂在Function的原型上面的,所以也就是说,所有的函数都会带有这个construct属性(方法),那么能够调用它的自然就是下面的f函数对象
f中的 this 当然也是调用f的对象,而这个f的功能就是用传给f的参数构建出这个对象的一些属性,这些属性的值就是这些参数的值
那么调用f的对象又是从何而来呢?答案是从Function.prototype.construct中生成的,细读代码可以发现,这个construct中使用了f的原型来构建了一个新对象newObject,然后这个newObject使用apply方法调用f,再利用f给自己增加属性,所以这个调用f的对象也就是这个利用f的原型构造的newObject,这种方式和new出一个新对象的思路是一致,也是apply方法能做到的一个很有意思的点