call是js最好用的函式之一,改變函式上下文是外掛程式編寫最經常使用的特性。
var name =
"小鋼炮"
;var cat =
function
say(name)
;say
("ketty");
// 小鋼炮-ketty
say.
call
(cat,
"ketty");
// 貓-ketty
看下面**:
function
say(name)
;var cat =
;cat.fn(
"ketty");
delete cat.fn;
我們把say方法掛載到cat物件上,次數執行say方法的上下文即為cat,執行完之後,過河拆橋的把say方法刪除。
看下面**:
function.prototype.
callx
=function()
;// 動態生成乙個函式名稱
var tempfn =
"callfn"
+new
date()
.gettime()
;// 將函式掛載到執行環境上
context[tempfn]
=this
;// 這裡是為了動態傳參,類似於es6的context[tempfn](...arr);
eval
("context[tempfn]("
+ args +
")")
;delete context[tempfn];}
;say.
callx
(cat,
'ketty');
console.
log(cat)
;
object.freeze
由於依賴修改執行環境,所以當目標物件使用object.freeze時,將無法工作。解決這個問題,並不困難,我們只要將目標物件拷貝乙份即可。
eval
這裡為了動態傳參使用了,呼叫了js引擎,在嚴格模式下是有問題的。
實現乙個Semaphore
其實這是我boss的想法,我一開始聽他這麼說也覺得比較差異,ms已經寫好了何必再自己寫乙個.答案有兩個 1ms寫的東西未必就是最好的,如完成埠,heap等.2semaphore是多執行緒程式設計中的核心元素所以有必要提速.我們都知道在多執行緒中ms提供的多個現成阻塞核心物件中critical mon...
乙個Redis Cache實現
應用中需要通過http呼叫遠端的資料,但是這個獲取過程需要執行較長時間,而且這個資料本身的變化也不頻繁,這種情況最適合用乙個cache來優化。前兩年在做短鏈結實現的時候,曾經用最好的語言php做過乙個redis cache實現 乙個簡單的redis應用 修訂版 但那個畢竟是乙個特定的實現,而且我現在...
實現乙個mvvm
最近在團隊內做了一次vue原理分享,現場手寫了乙個乞丐版mvvm,這裡記錄一下這個mvvm實現的過程。原始碼 這個mvvm是基於發布訂閱模式實現 也是vue本身的實現原理 最終達到的效果如下 使用方式也跟vue一樣 重置 實現很簡單 class mvvm options this.methods m...