Заставить функцию использовать объект в качестве области видимости - PullRequest
0 голосов
/ 17 мая 2018

Скажите, у меня есть такой код:

var opts = {hello: "it's me", imusthavetried: "a thousand times"}
function myFunction (options) {
}
myFunction(opts)

Есть ли способ сделать так, чтобы myFunction мог просто написать hello вместо options.hello? Я знаю, что мог бы пройтись по каждому дочернему объекту параметра и переопределить их, но есть ли способ автоматически использовать объект параметров в качестве области действия функции?

Ответы [ 3 ]

0 голосов
/ 17 мая 2018
var opts = {hello: "it's me", imusthavetried: "a thousand times"}
function myFunction (options) {
    with( options ) {
        console.log( hello ); // "it's me"
    }
}
myFunction(opts)
0 голосов
/ 17 мая 2018

Другой альтернативой является привязка объекта this к вашему объекту:

var opts = {hello: "it's me", imusthavetried: "a thousand times"}
function myFunction (options) {
  console.log(this.hello)
}

myFunction = myFunction.bind(opts);
myFunction();
0 голосов
/ 17 мая 2018

Вы можете использовать блок with, но его использование обычно не одобряется (как объяснено в документации MDN ). Раньше было так, что это вызывало проблемы с производительностью, но это было исправлено в современных версиях движка V8 (движок, используемый Google Chrome и Node.js).

function myFunction(options) {
  with(options) {
    console.log(hello);
  }
}

myFunction({ hello: 'Hello, World!' });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...