簡單來講,這三個函式存在的意義是改變函式執行時的上下文, 說的再具體一點就是改變函式執行時的this指向。
例如
function
person
(name)
person.prototype =
};var person = new person('duo');
person.showname();
上面的**中person呼叫showname方法後會在瀏覽器的控制台輸出duo
然後
ar animal =
// 1
call
person.showname
.call(animal);
person.showname
// 3 bind
person.showname
.bind(animal)();
很神奇,控制台輸出了三次cat
我們拿別人的showname方法,並動態改變其上下文幫自己輸出了資訊,說到底就是實現了復用。
上面看起來三個函式的作用差不多,幹的事幾乎是一樣的,那為什麼要存在3個傢伙呢,留乙個不就可以。所以其實他們幹的事從本質上講都是一樣的動態的改變this上下文,但是多少還是有一些差別的…
fn.call(obj, arg1, arg2, arg3...);
var arr = [34,5,3,6,54,6,-67,5,7,6,-8,687];math.max.call(math, 34,5,3,6,54,6,-67,5,7,6,-8,687);
math.min.call(math, 34,5,3,6,54,6,-67,5,7,6,-8,687);
var arraylike =
上面就是乙個普通的物件字面量,怎麼把它變成乙個陣列呢?最簡單的方法就是
var arr = array.prototype
.slice
.call(arraylike);
上面arr便是乙個包含arraylike元素的真正的陣列啦(注意資料結構必須是以數字為下標而且一定要有length屬性)
在js中要往陣列中新增元素,可以直接用push方法
var arr1 = [1,2,3];
var arr2 = [4,5,6];
// arr1 [1, 2, 3, 4, 5, 6]
// arr2 [4,5,6]
對於物件型的資料型別,我們可以借助call來得知他的具體型別,例如陣列
function
isarray
(obj)
isarray() // true
isarray('duo') // false
js中關於時間
1 獲取當前時間 var mydate new date mydate.getyear 獲取當前年份 2位 mydate.getfullyear 獲取完整的年份 4位,1970 mydate.getmonth 獲取當前月份 0 11,0代表1月 mydate.getdate 獲取當前日 1 31 m...
關於js中的then
then 相關的東西包括但不限於 promise,thien.js 雖然還沒徹底搞清楚這些個玩意兒,但是 現在知道了 then 是幹嘛的了 最主要的,是解決了非同步方法立刻返回的問題 這個特性帶來的後遺症 假設 我要等非同步處理完了,再去執行一段 後續 怎麼做?定義乙個全域性flag,非同步處理完成...
關於 js 中 this 的理解
今天在寫乙個tab選項卡切換時遇到乙個 this 的引用問題,做個記錄加深一下理解。定時器 var timer null var lis document.getelementsbytagname li for var i 0 i 給每個li元素新增自定義屬性id,值為當前li元素在lis中的索引 ...