javaScript问下这个this是指向哪里?顺便解读下这段代码?

function wrap(value, wrapper) {

    return function() {

      var args = [value];

      push.apply(args, arguments);

      return wrapper.apply(this, args);

    };

  }


哈士奇WWW
浏览 575回答 1
1回答

ABOUTYOU

如果我印象沒記錯,你這代碼可能不太全,這應該是 underscore 的 wrap 函數作用是包裝一個函數進行擴展function wrap(func, wrapper) {    return function() {        var args = [func];        Array.prototype.push.apply(args, arguments);        return wrapper.apply(this, args);     }; }例子舉個例子,現在有一函數 greeting 可以打招呼:function greeting() {    return '你好!'}console.log(greeting()) // => 你好!那現在我要現有函數的基礎下進行擴展,讓其能對人打招呼var greetingTo = wrap(greeting, function(func, name) {    return name + func() })console.log(greetingTo('王大錘')) // => 王大錘你好!原理function wrap(func, wrapper) {    // func 被包裝的函數     // wrapper 擴展的函數     return function() {        // 這邊先把被包裝的函數給放在一個數組裡         var args = [func];        // arguments 是內建的屬性,可以取得該函數的參數         // 這裡作用等同於 args.push(arguments)         Array.prototype.push.apply(args, arguments);                 // 這裡的 this 是為了保持原函數的上下文         // 被包裝後的函數是被誰呼叫的其 this 就是指向誰         // 下面舉例         return wrapper.apply(this, args);     }; }var robot = {    name: 'A-1',    greeting: '你好!',    hello: function() {        return this.greeting     } } robot.hello = wrap(robot.hello, function(func, name) {    // 這裡的 this 指向 robot     return name + func.bind(this)() })console.log(robot.hello('王大錘')) // => 王大錘你好
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript