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瀽的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C涓紝ARC涓嬬殑 strong鍜寃eak鎸囬拡鍘熺悊瑙i噴

js鍑芥暟鏂规硶

Spring Could Feign 璁捐鍘熺悊

V-for灏卞湴澶嶇敤鍘熺悊銆佽櫄鎷烡OM銆丏iff绠楁硶锛?/a>