1. 这两个是JS原生方法;
2. 自我理解:这个给“懒人”准备的方法;
3. 举例(重点):
//example 1:
function Person(name, age)
{
this.name = name;
this.age = age;
}
function Student()
{
//do nothing
}
var stu = new Student();
alert('name: ' + stu.name + '\n' + 'age: ' + stu.age); // name: undefined age:undefined
小结:以上未能弹出学生的姓名和年龄信息,因为我们在学生的类里什么都没做。
//example 2:
function Person(name, age)
{
this.name = name;
this.age = age;
}
function Student()
{
Person.apply(this, arguments);
}
var stu = new Student('Tom', 21);
alert('name: ' + stu.name + '\n' + 'age: ' + stu.age); // name: Tom age: 21
//example 3:
function Person(name, age)
{
this.name = name;
this.age = age;
}
function Student()
{
Person.call(this, 'Tom', 21);
}
var stu = new Student();
alert('name: ' + stu.name + '\n' + 'age: ' + stu.age);//name: Tom age: 21
总结:
1. 当Student类中什么都没有时,仍然想要显示学生的姓名和年龄,那么就要借用Person类中的方法来实现。
2. 如何借用?使用apply()或者call(), 因为Person中有name和age两个属性,借过来用的话,Student类中当然也就有
了name和age属性啊!在创建好学生类的实例后,就可以使用name和age属性了。
3. apply()和call()有和区别?二者的区别在于参数的不同。apply()中使用的是arguments, 一般适合参数不确定的时候使用;
call()中给定要传的参数,一般个数上来说是一定的。
总的来说,当你想用一个方法,但是这个方法自身没有,而你刚好又知道谁有这个方法,这个时候就可以使用上述的方法,把别人的东西拿来为我所用。