// 函数原型上添加 myCall方法 来模拟call Function.prototype.myCall = function(obj){ //我们要让传入的obj成为, 函数调用时的this值. obj._fn_ = this; //在obj上添加_fn_属性,值是this(要调用此方法的那个函数对象)。 obj._fn_(); //在obj上调用函数,那函数的this值就是obj. delete obj._fn_; // 再删除obj的_fn_属性,去除影响. //_fn_ 只是个属性名 你可以随意起名,但是要注意可能会覆盖obj上本来就有的属性 } let o = { name : 'o', fn:function() { console.log(this.name); } } let test = { name : 'test' } console.log(o.fn()); console.log(o.fn.call(test)); console.log(o.fn.myCall(test));