this
.name =81;
var obj =
}
var res = obj.getname;
res();
// 輸出 81 array(0)
// 輸出array(0) 是因為我沒有傳遞引數,所以params的長度為0
這樣的呼叫方法,會因為 this 指向的問題得不到正確的值syw
,所以要在呼叫時改變 this 指向,即可輸出正確的值:
var res = obj.getname;
res.
call
(obj)
;// syw array(0)
res.
(obj)
;// syw array(0)
進入觀察階段:
那麼轉換一下思維【以上的例子為例】:
ok,明白了怎麼做,我們就實現一下。
進入實現階段:
首先,看一下完整的實現**:
// 原生js實現call
function.prototype.
mycall
=function
(currentthis,
...params)
// 建立乙個不重複的常量
const unique =
symbol
('anything');
currentthis[unique]
=this
;// 呼叫函式並將結果返回
let result = currentthis[unique]
(...params)
;// 刪除增加的屬性
delete currentthis[unique]
;return result;
}
**解釋:
為什麼在function.prototype
上實現我們自己的 mycall 方法,這個我上一章節講的有,有不懂的小夥伴可以使用上面提供的傳送門。
原生js實現Ajax
一般來說,大家可能都會習慣用jquery提供的ajax方法,但是用原生的js怎麼去實現ajax方法呢?jquery提供的ajax方法 ajax success function error function 原生js實現ajax方法 var ajax obj.send post function u...
原生js實現Ajax
ajax success function error function 原生js實現ajax方法 var ajax xhr.send datat應為 a a1 b b1 這種字串格式,在jq裡如果data為物件會自動將物件轉成這種字串格式 post function url,data,fn xhr...
原生js實現Ajax,JSONP
利用script標籤可以跨域請求資源解決跨域問題。詳細解釋可以看徹底弄懂跨域問題 原生js實現ajax function ajax params params.data params.data var json params.jsonp jsonp params json params 判斷是jso...