2016-11-29 3 views
1

Как это:Есть ли способ получить доступ к значениям предварительной привязки функции?

const a = (arg0, arg1, arg2) => { 
    console.log(arg0); 
}; 
const b = a.bind(null, 1, 2, 3) 

Теперь предположим, что у меня есть только б, можно получить список предварительно привязки значение а? Я имею в виду значение 1, 2, 3

Если это возможно, то как?

+0

Если вы были все эти Params в некоторой переменной, чем да, иначе вы не можете. То же, что и в 'var b = 5 + 2' и * get * 2 ... – Justinas

+0

@ Justinas не совсем, у меня есть b, поэтому, если я делаю b.call(), то аргументы определены, поэтому мне интересно: так как это точно, я могу это знать каким-то образом? –

+0

Итак, вы хотите, чтобы все параметры передавались функции внутри? – Justinas

ответ

1

Если вы создаете собственную функцию привязки, вы можете прикрепить к ней новые свойства. Функция может иметь свойства, добавленные к ней, как и любой другой объект.

function bind(fn, thisArg, ...boundArgs) { 
 
    const func = function(...args) { 
 
    return fn.call(thisArg, ...boundArgs, ...args) 
 
    } 
 
    // you can hide the properties from public view using 
 
    // defineProperties, unfortunately they are still public 
 
    Object.defineProperties(func, { 
 
    __boundArgs: { value: boundArgs }, 
 
    __thisArg: { value: thisArg }, 
 
    __boundFunction: { value: fn } 
 
    }) 
 
    return func 
 
} 
 

 
const a = (a, b, c) => console.log(a, b, c) 
 

 
const b = bind(a, null, 1, 2, 3) 
 

 
b() 
 

 
console.log(b.__boundArgs) 
 
console.log(b.__thisArgs) 
 
console.log(b.__boundFunction)
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>

Первый аргумент Function.prototype.bind является this Arg.

Чтобы ответить на вопрос, если вы используете хром, вы можете получить доступ к информации в свойстве [[BoundArgs]] о связанной функции. запустить код и проверьте консоль

const a = (arg0, arg1, arg2) => { 
 
    console.log(arg0, arg1, arg2); 
 
}; 
 
const b = a.bind(null, 1, 2, 3) 
 
b() 
 
console.dir(b)

+0

Я вижу, что BoundArgs есть, но как я могу его получить? –

+0

Я в Node.js env, я вижу, что BoundArgs есть с console.dir() в консоли, но как я могу его получить? t.bound() VM501: 1 Uncaught TypeError: t.bound не является функцией (...) –

+0

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