使函数使用对象作为其范围

时间:2018-05-17 17:02:52

标签: javascript object scope

说我有这样的代码:

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

有没有办法让myFunction只能写hello而不是options.hello?我知道我可以循环遍历每个选项对象子节点并重新定义它们,但有没有办法自动将options对象用作函数的范围?

3 个答案:

答案 0 :(得分:3)

您可以使用with块,但它的使用通常不受欢迎(如MDN documentation中所述)。过去它会导致性能问题,但现代版本的V8引擎(谷歌Chrome和Node.js使用的引擎)已经修复了这个问题。



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

myFunction({ hello: 'Hello, World!' });




答案 1 :(得分:1)

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

答案 2 :(得分:0)

另一种选择是绑定"这个"反对你的对象:



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

myFunction = myFunction.bind(opts);
myFunction();