以下是我要幫大家整理的Js apply()使用,有興趣的同學可以去看看。
Js apply方法詳解
我在一開始看到javascript的函數apply和call時,非常的模糊,看也看不懂,最近在網上看到一些文章對apply方法和call的一些示例,總算是看的有點眉目了,在這裡我做如下筆記,希望和大家分享.. 如有什麼不對的或者說法不明確的地方希望讀者多多提一些意見,以便共同提升..
主要我是要解決幾個問題:
1.apply和call的區別在哪裡
2.什麼情況下用apply ,什麼情況下用call
3.apply的其他巧妙用法(一般在什麼情況下可以使用apply)
我先從網上查到關於apply和call的定義,然後用例子來解釋這兩個方法的意思和如何去用.
apply:方法上另一個物件的方法,而繼承另一個物件的屬性.
Function.apply(obj, args)方法能接收兩個參數
obj:這個物件將取代Function類別裡this物件
args:這個是數組,它將作為參數傳給Function(args--> arguments)
call:且與apply的意思一樣,只不過是參數列表不一樣.
# Function.call(obj,[param1[,param2[
## Function.call(obj,[param1[,param2[## Function). ])
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);
vararr1=new Array("1","2","3"); vararr2=new Array("4","5","6"); Array.prototype.push.apply(arr1,arr2);
这块在调用的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,.所以直接传递了一个null过去
b)Math.min 可以实现得到数组中最小的一项
同样和 max是一个思想 var min=Math.min.apply(null,array);
c)Array.prototype.push 可以实现两个数组合并
同样push方法没有提供push一个数组,但是它提供了push(param1,param,…paramN) 所以同样也可以通过apply来装换一下这个数组,即:
vararr1=new Array("1","2","3"); vararr2=new Array("4","5","6"); Array.prototype.push.apply(arr1,arr2);
也可以这样理解,arr1调用了push方法,参数是通过apply将数组装换为参数列表的集合.
通常在什么情况下,可以使用apply类似Math.min等之类的特殊用法:
一般在目标函数只需要n个参数列表,而不接收一个数组的形式([param1[,param2[,…[,paramN]]]]),可以通过apply的方式巧妙地解决这个问题!
5.总结:
一开始我对apply 非常的不懂,最后多看了几遍,自己多敲了几遍代码,才明白了中间的道理,所以,不管做什么事情,只要自己肯动脑子,肯动手敲代码,这样一个技术就会掌握…
还有比如第四部分得内容,巧妙的解决了实实在在存在的问题,这个肯定不是一个初学者能想到的解决方案(这个也不是我自己想的),没有对编程有一定认识的不会想到这个的,还是一句话,多积累,多学习,提升自己的能力和对编程思想的理解能力才是最关键!
上面是我整理给大家的Js apply()使用,希望今后会对大家有帮助。
相关文章:
以上是詳細講解Js apply()使用(含代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!