网上大牛,说的很直接,劫持另外一个对象(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()方法.

 

原文地址:http://www.cnblogs.com/Young111/p/16914811.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性