Function.prototype.call=function(x){
x = x || {};
x[`fn`] = this;
var args = ``;//引數列表
var type;
for (var i = 1; i<arguments.length;i++) {
if (typeof arguments[i] === `string`) {//引數是字串,需要在兩邊加引號,因為在拼接引數的時候會被丟掉
type = `"`+arguments[i] + `"`;
}
else if (typeof arguments[i] === `function`) {//引數是函式的話,"反編譯"出函式的程式碼
type = arguments[i].toString();
}
else if (typeof arguments[i] === `object` ) {//陣列和物件可能含有複雜的組合型別資料,可以通過遍歷變數轉成字串
if (/function Array()/.test(arguments[i][`constructor`])) {//引數是陣列則在陣列兩邊加上[,]
type = "[" + arguments[i] + "]";
} else {
type = JSON.stringify(arguments[i])//物件的話,json化,然後執行的時候反json化
}
} else {
type = arguments[i];//數字型別
}
args = args + type +`,`;
}
args = args.slice(0,args.length-1);//去掉最後的逗號
var q = new Function(`var x = arguments[0];x.fn(`+args+`)`)//new Function的時候作用域是獨立的,無法訪問call裡面的x,所以需要傳進去
q(x)
}
function parse_Array_Object(arg) {
//可以npm install traverse-deep和結合js的map函式進行相應處理,主要是遍歷arg的每一個元素,進行型別判斷,然後返回相應的字串
//to do ..
}
function a(a){
console.log(this,arguments)
}
a.call({d:1},2,`s`,[1,2,3],{s:1},function() {})
js的call函式”原始碼”
相關文章
- 手寫JS函式的call、apply、bindJS函式APP
- 理解JS函式之call,apply,bindJS函式APP
- call仿函式函式
- 實現call函式,手寫Function.prototype.call函式函式Function
- C++(STL原始碼):37---仿函式(函式物件)原始碼剖析C++原始碼函式物件
- Vue 原始碼中的工具函式Vue原始碼函式
- 臨時讀原始碼的函式原始碼函式
- apply & call & bind 原始碼APP原始碼
- count 函式原始碼分析函式原始碼
- 函式中的apply,call入門介紹函式APP
- 類中的__init__()和__call__()函式函式
- bind函式polyfill原始碼解析函式原始碼
- ClickHouse原始碼筆記5:聚合函式的原始碼再梳理原始碼筆記函式
- JS程式碼簡潔之道--函式JS函式
- Js常用的函式JS函式
- (譯) 函式式 JS #2: 函式!函式JS
- 【原始碼】Scrollsubplot:subplot函式的升級版原始碼函式
- snabbdom原始碼解析(二) h函式原始碼函式
- 讀 zepto 原始碼之工具函式原始碼函式
- [PHP原始碼閱讀]strlen函式PHP原始碼函式
- Vue原始碼: 建構函式入口Vue原始碼函式
- js的函式和物件JS函式物件
- js函式中的this指向JS函式
- js中的匿名函式JS函式
- js的函式function(一)JS函式Function
- PHP原始碼分析-函式array_merge的”BUG”PHP原始碼函式
- js 常用函式JS函式
- vue原始碼解讀-建構函式Vue原始碼函式
- redux原始碼分析之四:compose函式Redux原始碼函式
- JS函式表示式——函式遞迴、閉包JS函式遞迴
- JS的學習理解--->函式JS函式
- JS中的call、apply、bindJSAPP
- 人人都能懂的Vue原始碼系列(三)—resolveConstructorOptions函式Vue原始碼Struct函式
- Vue原始碼探祕(五)(_render 函式的實現)Vue原始碼函式
- ClickHouse原始碼筆記1:聚合函式的實現原始碼筆記函式
- JavaScript—call, apply, bind 函式能幹啥?(全)(20)JavaScriptAPP函式
- 手寫系列:call、apply、bind、函式柯里化APP函式
- JS 中的函式表示式和函式宣告你混淆了嗎?JS函式