js中apply和call的应用

来源:互联网 发布:三国志13pk优化补丁 编辑:程序博客网 时间:2024/05/29 16:56
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>apply和call的应用</title>
</head>
<body>


</body>
<script type="text/javascript">
//apply的用法:Function.apply(obj,args)
/**
 * 1、让一个对象继承另外一个对象的方法和属性,在这个例子中Student拥有了People所有的属性和方法,
        但是有一点要注意就是Student的构造函数中需要继承People中的参数顺序必须和Peole的一致,比如
        People(name,age)然后 Student(name,age,grade)Student中前二个参数输名字和顺序
        必须和People一致,否则取不到或者是取得值不对
 */


/* function People(name,age){
this.name=name;
this.age=age;
this.run=function(){
alert("I can run");
}
}
function Student(name,age,grade){
People.apply(this,arguments);
this.grade=grade;
}
var s=new Student("zhangssan",18,"三年二班");
alert(s.name+","+s.age+","+s.grade);
s.run(); */
/**
 * apply用法2:可以将数组转换成一个一个的参数,用在合适的地方,比如
 有些函数不支持传入数组,用apply可以将数组转成一个个的参数再用
 */
/* var arr1=['1','2','3'];
var arr2=['4','5','6'];
Array.prototype.push.apply(arr1,arr2);
 for(var i=0;i<arr1.length;i++){
alert(arr1[i]);

alert(Math.min.apply(null,arr2)); */
//call的用法call(object,par1,par2....)参数都是可选项
/**
 * 1、和apply的用法是一样的,可以将上面的People.apply(this,arguments);改成People.call(this,name,age);
 但是call更灵活,就是说可以改变参数的顺序
 */
 function People(name,age){
this.name=name;
this.age=age;
this.run=function(){
alert("I can run");
}
}
function Student(age,name,grade){
People.call(this,name,age);
this.grade=grade;
}
var s=new Student(18,"zhangssan","三年二班");
alert(s.name+","+s.age+","+s.grade);
s.run();
//2、call的另一个巧妙的作用就是能改变函数运行时的指针
/**
var each=function(array,fn){
for(var index=0;index<array.length;index++){
fn(index,array[index]);
}
};
each([2,3,5],function(){
console.log(this);//这个时候this是window
});
**/
var each=function(array,fn){
for(var index=0;index<array.length;index++){
fn.call(array[index],index,array[index]);
}
};
each([2,3,5],function(){
console.log(this);//这个时候this是array[index]
});
</script>
</html>
原创粉丝点击