2013-07-28 3 views
0

Я хочу сделать что-то вроде этого:JS, добавить параметр в функцию

var f = function(){ 
    var args = arguments; 
    args.push(this._caller); 
    this._base(args); 
}; 

f._caller = someObject; 
f._base = function(x,y,z){ alert(x+':'+y+':'+z);}; 

f(y,z); 

В принципе - я хочу, чтобы дать функцию некоторые внутренние параметры, но все же функция должна быть вызвана с его параметрами и пользователь не должен узнайте об этих параметрах, когда он вызывает эту функцию.

Проблема в том, что в теле функции «это» будет означать «окно», а не нужную функцию.

Так как я могу это сделать? И могу ли я сделать это вообще?

+2

[ 'Функция # apply'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply). Также обратите внимание, что 'arguments' не является реальным массивом, вы не можете« вставлять »его. – DCoder

+0

Это не оригинальный пример того, что я «работал» - он был больше, поэтому я сделал такое изменение. Спасибо за информацию, узнаю также –

+0

, функция.pply не поможет, потому что вам все равно нужно передать этот параметр, или пользователь должен четко написать f.apply (f, ...), а я просто хочу f (.. .). Обновленный код, чтобы четко показать, что мне нужно –

ответ

2
  1. this не будет сама function, но контекст функция была вызвана. Вы можете получить доступ к свойствам function, если вы его назовете (var f не устанавливает name).

    var f = function fn() { 
        var _caller = fn._caller; 
        var _base = fn._base; 
        // ... 
    }; 
    
  2. Метод arguments.push() не существует как arguments не на самом деле Array. Хотя, вы можете создать Array из него с .slice():

    var args = Array.prototype.slice.call(argument, 0); 
    args.push(_caller); 
    
  3. Чтобы установить контекст (this) и передать Array аргументов, используйте Function#apply.

    return _base.apply(this, args); 
    
+0

, так что нет другого способа, кроме функции # apply? –

+0

@AndrewYukhymchak Либо это, либо ['.call()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call), если вы хотите указать значение «этого». Но '.call()' передаст 'Array' как значение одного аргумента. –

+0

dang ... не ответ, который я хочу услышать. TY. Закрыто –

Смежные вопросы