JS:劫持2(call()、mycall())

一些规律:
            1.所有的函数对象都有call方法---Function.prototype 有call方法
            2.obj.say.call(obj2) 运行的函数是say函数(哪个函数调call方法就是哪个函数运行)
            3.obj.say.call(obj2) 调用这个函数的对象是obj2(obj2调用say函数)
 

自定义的mycall方法:

        Function.prototype.mycall = function (That, args) {
            //哪个函数调用mycall方法就是哪个函数运行
            // 调用这个函数的对象是That
            this(args);
        }
        var obj = {
            name:'lili',
            say : function(args){
                console.log('say',args,this);
            }
        }
        obj.say.mycall(obj2, 100, 200);
        var obj2 = {
            age:10;
        };

打印结果:

say 100 Window {window: Window, self: Window, document: document, name: '', location: Location, …}

注:obj.say.mycall(obj2, 100, 200);

等价于
obj2.say=obj.say;
obj2.say(100,200);
 
posted on 2022-06-26 15:55  香香鲲  阅读(30)  评论(0编辑  收藏  举报