Js中的Applyg和call

/*定义一个Person类*/
  function Person(name,age)
  {
    this.name=name;
    this.age=age;
  }
  
  /*定义一个学生类*/
  function Student(name,age,grade)
  {
   /*第一种方法:使用apply*/
   /*Person.apply(this,arguments);*//*this指代student对象,只接受两个参数,arguments为
   隐式数组对象,用来接受传入的参数*/
    Person.call(this,name,age);
    /*我理解的这行代码的意思就是让student对象继承Person对象的属性*/
    this.grade=grade;
  }
  /*实例化Student对象*/
  var student=new Student("Huaicui Zheng",22,"研究生二年级");
  alert("姓名:"+student.name+'\n'+"年龄:"+student.age+"\n"+"年级:"+student.grade);

下面我们来看一下牛客网上的测试题: 将函数 fn 的执行上下文改为 obj 对象。

输入:

  function () {return this.greeting + ', ' + this.name + '!!!';}, {greeting: 'Hello', name: 'Rebecca'}
    输出:
    Hello, Rebecca!!!

思路:call、apply方法可以用来代替另一个对象调用一个方法,call方法可以将一个函数的对象上下文从初始的上下文改变为thisObject指定的新对象,如果没有提供thisObj参数,那么Global对象被用于thisObj。

下面是一个事例代码:

function fn()
{
  return this.greeting+this.name;
}
var s={
  greeting:"Hello,",
  name:"Huaicui Zheng"
};
console.log('将函数的上下文改为obj指定的新对象',fn.apply(s));/*Hello,Huaicui Zheng*/

猜你喜欢

转载自blog.csdn.net/qq_26102281/article/details/84928319