Можете ли вы иметь переменные области видимости функции, устанавливаемые автоматически, без определения имен во входных данных функции - PullRequest
0 голосов
/ 12 сентября 2018

Возьмем, к примеру, этот сниппер,

функция test1 принимает объект в качестве входных данных для аргументов, но определяет имена свойств, которые должны естественно отображаться в область действия функции через ({var0, var1, var0})

(Я не уверен, что вызывать эти переменные, переменные области видимости ??)

функция test5 и test6 оба принимают объект в качестве входных данных для аргументов таким же образом, но 1 просто говорит (args), а другая пытаетсячтобы расширить входящие аргументы в объекте аргументов с помощью ({..args})

, что интересно, так это то, что объект аргументов в итоге выглядит одинаково в случаях test1 test5 & test6, но переменные области видимости не совпадают.

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

// functionTest.js
function test1({var0, var1, var2}={}){
	console.log("*** test1 ***")
	console.log("this.var0", this.var0)
	console.log("arguments", arguments)
	console.log("var0", var0)
	console.log("var1", var1)
	console.log("var2", var2)
}
function test4(arguments){
	console.log("*** test4 ***")
	console.log("this.var0", this.var0)
	console.log("arguments", arguments)
	console.log("var0", var0)
}
function test5(args){
	console.log("*** test5 ***")
	console.log("this.var0", this.var0)
	console.log("arguments", arguments)
	console.log("var0", var0)
}
function test6({...args}){
	console.log("*** test6 ***")
	console.log("this.var0", this.var0)
	console.log("arguments", arguments)
	console.log("var0", var0)
}

let testValues = ["test0", "test1", "test2"]

try {
	test1({var0: testValues[0]})
} catch(error){console.error(error)}
try {
	test4({var0: testValues[0]})
} catch(error){console.error(error)}
try {
	test5({var0: testValues[0]})
} catch(error){console.error(error)}
try {
	test6({var0: testValues[0]})
} catch(error){console.error(error)}

1 Ответ

0 голосов
/ 12 сентября 2018

Кажется, что раньше это было возможно с

with(args){
 // access to args.property via simply property
}

, но это устарело

, теперь единственный способ -

Object.keys(args).forEach((key) => {
    Object.defineProperty(this, key, {
        value: args[key]
    });
});

, который ...хорошо, я думаю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...