/*定义一个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*/