js涓璫all,apply鍜宐ind鍑芥暟鍘熺悊瑙f瀽
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js涓璫all,apply鍜宐ind鍑芥暟鍘熺悊瑙f瀽相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/%e6%96%b9%e6%b3%95' title='鏂规硶'>鏂规硶 鍙傛暟 return 鏁扮粍 result 搴旂敤 turn
js涓璫all,apply鍜宐ind骞挎硾搴旂敤锛岄兘鍙互鐢ㄦ潵鏀瑰彉this鎸囧悜锛宑all鍜宎pply鐨勫尯鍒湪浜庡弬鏁颁紶閫掔殑涓嶅悓锛屽墠鑰呮槸鍙傛暟搴忓垪锛屽悗鑰呮槸鏁扮粍銆俠ind鐨勫嚱鏁颁篃鏄弬鏁板簭鍒楋紝浣嗘槸闇€瑕佺敓鎴愪竴涓柊鐨勫嚱鏁?/p>
1.call锛屼紶閫掔殑鍙傛暟涓哄簭鍒?/p>
Function.prototype.mycall = function(fn) {
銆€銆€if(typeof(this) !=鈥榝unction鈥?{ // 瀹归敊澶勭悊
銆€銆€銆€銆€throw new TypeError(鈥榥ot function鈥?
銆€銆€}
銆€銆€fn = fn || window // 濡傛灉浼犵殑鏄痭ull 鍒欓粯璁indow
銆€銆€fn.caller= this ; // this鎸囧悜璋冪敤鑰?/p>
銆€銆€let arg = [...argument].slice(1) // 浣跨敤鎵╁睍杩愮畻绗︽妸浼暟缁勮浆鍖栦负鐪熸暟缁?/p>
銆€銆€let result = arg.length > 0 ? fn.caller(...arg) : fn.caller()
銆€銆€delete fn.caller
銆€銆€return result
}
2.apply鍑芥暟锛屽弬鏁版暟鏁扮粍
Function.prototype.myapply= function(fn) {
銆€銆€if(typeof(this) !=鈥榝unction鈥?{ // 瀹归敊澶勭悊
銆€銆€銆€銆€throw new TypeError(鈥榥ot function鈥?
銆€銆€}
銆€銆€fn = fn || window // 濡傛灉浼犵殑鏄痭ull 鍒欓粯璁indow
銆€銆€fn.caller= this ; // this鎸囧悜璋冪敤鑰?/p>
銆€銆€let arg =argument[1] // 鑾峰彇鍙傛暟鏁扮粍
銆€ let result = arg ? fn.caller(...arg) : fn.caller()
銆€銆€delete fn.caller
銆€銆€return result
}
3.call鍑芥暟锛岄渶瑕佺敤鍒版煰閲屽寲鍜岄棴鍖?/p>
Function.prototype.mybind= function(fn) {
// fn 璋冪敤璇ユ柟娉曠殑绗竴涓€?br /> if(type this != 鈥榝unction鈥? {
throw new TypeError(鈥榥ot function鈥?
}
let _this = this; //this鎸囧悜.myBind 鍓嶉潰鐨勬柟娉曪紝涓篺n鍑芥暟娣诲姞涓€涓柟娉曪紝涓巘his鐩稿悓鎸囧悜
let arg = [...arguments].slice(1)
return function F() {
// 澶勭悊鍑芥暟浣跨敤new鐨勬儏鍐?br /> if (this instanceof F) {
return new _this(...arg, ...arguments)
} else {
return _this.apply(fn, arg.concat(...arguments))
}
}
以上是关于js涓璫all,apply鍜宐ind鍑芥暟鍘熺悊瑙f瀽的主要内容,如果未能解决你的问题,请参考以下文章