Javascript:由 “鴨子類型” 得出來的推論


背景

學動態語言的都知道一句話:“如果它走起來像鴨子,而且叫起來像鴨子,那么它就是鴨子”,Javascript也支持鴨子類型,下文就說說鴨子類型在Javascript中的兩個應用場景。

兩個推論

  1. 凡是這樣簽名的方法:object.method(arg1, arg2, ...)的方法,都可以采用method.apply(object, [arg1, arg2, ...])進行調研。
  2. array的某些方法(不會修改array狀態)可以使用arguments以Array.prototype.method.apply(arguments,[arg1, arg2, ...])的方式調用。
  1. 前者:把array當成arguments(鴨子)
  2. 后者:把argument當成array(鴨子)

一個小測試

Javascript中的慣用法

 1     console.log(Math.max.apply(Math, [3, 2, 1]));
 2 
 3     var arr = [1, 2, 3]
 4     Array.prototype.push.apply(arr, [4, 5, 6]);
 5     console.log(arr);
 6 
 7     (function () {
 8         var arr = Array.prototype.slice.apply(arguments);
 9         console.log(arr);
10     })(1, 2, 3);

我們自己來模仿鴨子

1     var arr = Array.prototype.slice.apply({ 0: 1, 1: 2, 2: 3, length: 3 });
2     console.log(arr);

備注

鴨子類型和隱式接口有那么一點點類似,它擴大了多態的概念。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM