apply()
Function.prototype.apply() 将会调用一个以 this 和数组形式的 arguments 为参数的方法。m
fun.apply(thisArg,[argsArray])
每当要为一个新的对象添加一个方法时,有时不得不为其重写一个方法。而如果利用 apply 的话,只需要写一次方法,然后在这个新的对象中继承它即可,十分方便。apply 和 call 方法十分相似,仅仅只是参数不同而已,但正是因为这一点,我们在用 apply 时不必知道被调用的对象的具体参数,可以只穿 arguments,如此一来,被调用的这个对象将负责 handle 触底的 arguments。1. 我们可以像 Java 那样,利用 apply 为一个对象创建构造链。在下面的例子中,我们将创建一个名为 construct 的全局方法,这个方法可以不必让你传递一个一个的参数,取而代之的则是传递一个参数数组。
// Function.prototype.construct = function(aArgs) {
// var oNew = Object.create(this.prototype);
// this.apply(oNew, aArgs);
// return oNew;
// };
//Function.prototype.construct = function(aArgs) {
// var fConstructor = this, fNewConstr = function() {
// fConstructor.apply(this, aArgs);
// };
// fNewConstr.prototype = fConstructor.prototype;
// return new fNewConstr();
//};
Function.prototype.construct = function (aArgs) {
var fNewConstr = new Function(“”);
fNewConstr.prototype = this.prototype;
var oNew = new fNewConstr();
this.apply(oNew, aArgs);
return oNew;
};
function MyConstructor() {
for (var nProp = 0; nProp < arguments.length; nProp++) {
this[‘property’ + nProp] = arguments[nProp];
}
}
var myArray = [4, ‘Hello world!’, false];
var myInstance = MyConstructor.construct(myArray);
console.log(myInstance.property1); // logs ‘Hello world!’
console.log(myInstance instanceof MyConstructor); // logs ‘true’
console.log(myInstance.constructor);
function minOfArray(arr){
var min = Infinity;
var QUANTUM = 32768;
var len=arr.length;
for(var i=0;i<len;i+=QUANTUM){
var submin = Math.min.apply(null,arr.slice(i,Math.min(i+QUANTUM,len)));
min = Math.min(submin,min)
}
return min;
}
var min = minOfArray([5,6,2,3,7]);
console.log(min)//2
function Person(name,age)
{
this.name=name;
this.age=age;
}
/* 定义一个学生类 */
function Student(name,age,grade)
{
Person.apply(this,arguments);
this.grade=grade;
}
// 创建一个学生类
var student=new Student(“zhangsan”,21,” 一年级 ”);
// 测试
alert(“name:”+student.name+”\n”+”age:”+student.age+”\n”+”grade:”+student.grade);