標籤:
- apply:方法能劫持另外一個對象的方法,繼承另外一個對象的屬性.
Function.apply(obj,args)方法能接收兩個參數
obj:這個對象將代替Function類裡this對象
args:這個是數組,它將作為參數傳給Function(args-->arguments)
Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:這個對象將代替Function類裡this對象
params:這個是一個參數列表
1.apply樣本:
<script type="text/javascript">
/*定義一個人類*/
function Person(name,age) {
this.name=name; this.age=age;
}
/*定義一個學生類*/
functionStudent(name,age,grade) {
Person.apply(this,arguments); this.grade=grade;
}
//建立一個學生類
var student=new Student("qian",21,"一年級");
//測試
alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);
//大家可以看到測試結果name:qian age:21 grade:一年級
//學生類裡面我沒有給name和age屬性賦值啊,為什麼又存在這兩個屬性的值呢,這個就是apply的神奇之處.
</script>
分析: Person.apply(this,arguments);
this:在建立對象在這個時候代表的是student
arguments:是一個數組,也就是[“qian”,”21”,”一年級”];
也就是通俗一點講就是:用student去執行Person這個類裡面的內容,在Person這個類裡面存在this.name等之類的語句,這樣就將屬性建立到了student對象裡面
2.call樣本
在Studen函數裡面可以將apply中修改成如下:
Person.call(this,name,age);
這樣就ok了
call()和apply()的認知