标签:htm prototype null window html var class person 使用
//apply和call使用
function Person(age,sex){
this.age=age;
this.sex=sex;
}
//通过原型添加方法
Person.prototype.sayHi=function(x,y){
console.log("你好啊"+this.sex);
return 1000;
}
var person=new Person(10,"男");
person.sayHi();
//
function Student(name,sex){
this.name=name;
this.sex=sex;
}
//此时改变了原型对象的问题,
var stu=new Student("小明","人妖");
var r1=person.sayHi.apply(stu,[10,20]);//改变了this对象给stu添加了sayHi对象
var r2=person.sayHi.call(stu,10,20);
//apply和call的使用方法
/*
* apply的使用语法
* 函数名字.apply(对象,[参数1,参数2,...]);
* 方法名字.apply(对象,[参数1,参数2,...]);
* call的使用语法
* 函数名字.call(对象,参数1,参数2,...);
* 方法名字.call(对象,参数1,参数2,...);
*
* 作用:改变this的指向
* 不同的地方:参数传递的方式是不一样的
*
* 只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用apply或者是call的方法改变this的指向
*
* */
//apply和call都可以改变this的指向
//函数的调用,改变this的指向
function f1(x,y) {
console.log((x+y)+":===>"+this);
return "这是函数的返回值";
}
//apply和call调用
var r1=f1.apply(null,[1,2]);//此时f1中的this是window
console.log(r1);
var r2=f1.call(null,1,2);//此时f1中的this是window
console.log(r2);
console.log("=============>");
// 改变this的指向
var obj={
sex:"男"
};
// 本来f1函数是window对象的,但是传入obj之后,f1函数此时就是obj对象的
var r3=f1.apply(obj,[1,2]);//此时f1中的this是obj
console.log(r3);
var r4=f1.call(obj,1,2);//此时f1中的this是obj
console.log(r4);
标签:htm prototype null window html var class person 使用
原文地址:https://www.cnblogs.com/liushisaonian/p/9460585.html