学习apply()方法的使用,记录一下

网上大牛,说的很直接,劫持另外一个对象(a)的方法,继承a的属性., 我个人理解,就是把你的变成我的.

1.对象的继承,一般的做法是复制:Object.extend

下面是prototype.js的实现方式是:传入两个对象,把source里的属性,放到destination里,很直白

Object.extend = function(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
}

2.Function.apply(obj, args)的实现

当然还有要说的apply()方法,就是:

Function.apply(obj,args)方法,需要接收两个参数.

  • obj: 这个对象将代替Function类里this对象
  • args: 这个是数组,它将作为参数传给Function(args-->arguments)

下面测试使用apply方法,实现学生对象,拥有'人'对象的吃的功能以及写的功能.

有一个我总用的在线测试js的工具, 直接在上面测试就行,https://jsrun.net/new

function Person(name,age){//定一个人的对象,有名字,年龄
    this.name = name;
    this.age = age;
    //还有吃的功能
    this.eat=function(){
        console.log('吃');
    }

}

function Write(){//写字的类
    this.funcName = "Write";
    
    this.show = function(){
        let msg = [];
        for(let key in this){
            if(typeof(this[key]) != "function"){
                msg.push([key, ":", this[key]].join(""));
            }
        }
        console.log(msg.join(" "));
    }
    
}

function Student(name,age,grade,school){    //学生类
    Person.apply(this,arguments);
    Write.apply(this,arguments);
    this.grade=grade;                //年级
    this.school=school;                 //学校
}

let p1 = new Person('Mark',23);
p1.eat();
let s1 = new Student('Jhon',23,3,"铁路大学");
s1.show();
s1.eat();

结果展示:

> "吃"
> "name:Jhon age:23 funcName:Write grade:3 school:铁路大学"
> "吃"

结论: 学生类本来不具备任何方法,但是在Person.apply(this,arguments)后,他就具备了Person类的eat()方法和所有属性。apply方法劫持另外一个对象的方法,继承另外一个对象的属性

2.apply()的应用

Function.apply()在提升程序性能方面的技巧

我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所有参数中的最大值。

比如
alert(Math.max(5,8))   //8
alert(Math.max(5,7,9,3,1,6))   //9

但是在很多情况下,我们需要找出数组中最大的元素。

例如:

let arr = [1,2,0,4];

//max方法不支持数组格式,需要遍历

const getMax1 = function(arr){
    var back = '';
    for(var i = 0,back = arr[0]; i < arr.length; i++){
    
        back = Math.max(arr[i],back);
    }
    return back;
}
console.log(getMax1(arr));

上述,我们需要得到数组中最大的元素,需要遍历,在调用max方法找到最大方法,如果使用apply()方法,可以很简洁的获取最大值

//使用apply之后,
const getMax = function(arr){
    return Math.max.apply(null,arr);
}

console.log(getMax(arr));

两段代码可以看出,使用apply(),代码简洁,高效。根据自己实际情况,灵活使用apply()方法.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章