2016-01-25 50 views
-1

我試圖找出這個問題的答案:通用函數?

不使用JavaScript的綁定功能,實現了神奇的功能,使:

var add = function(a, b) { return a + b; } 
var addTo = add.magic(2); 

var say = function(something) { return something; } 
var welcome = say.magic('Hi, how are you?'); 

addTo(5) == 7; 
welcome() == 'Hi, how are you?'; 

我想我需要使用電話或適用,但我只是不知道,如果有人能指出我在正確的方向或提供一些文獻,將不勝感激。

回答

0

您可以使用封閉,並apply function

Function.prototype.magic = function(){ 
 
    var self = this; 
 
    var args = Array.from(arguments); 
 
    
 
    return function(){ 
 
    return self.apply(null, args.concat(Array.from(arguments))); 
 
    } 
 
} 
 

 

 
var add = function(a, b) { return a + b; } 
 
var addTo = add.magic(2); 
 

 
var say = function(something) { return something; } 
 
var welcome = say.magic('Hi, how are you?'); 
 

 
console.log(addTo(5) == 7); 
 
console.log(welcome() == 'Hi, how are you?');

你也可以看看 Polyfill for bind功能上MDN

+0

這是它, 謝謝。 – user2755996

1

請參見下面的代碼:

Object.prototype.magic = function (message) { 
     alert(message); 
    } 
    var add = function (a, b) { return a + b; } 
    var addTo = add.magic(2); 

    var say = function (something) { return something; } 
    var welcome = say.magic('Hi, how are you?'); 

    addTo(5) == 7; 
    welcome() == 'Hi, how are you?'; 
+0

非常感謝,我需要閱讀原型。在這種情況下 – user2755996

+0

_addTo_不是函數,所以當你嘗試_addTo(5)_時你會得到異常 – Grundy