将参数传递给 JavaScript 对象 Getter

新手上路,请多包涵
var URIController = {
    get href() {
        return url.location.href;
    }
}

我有上面的对象结构。但是 URIController.href 属性取决于另一个对象 url

如果 url 是全局定义的,则 URIController.href 有效。但我想手动将 url 对象传递给 href getter。

 var URIController = {
    get href(url) {
        return url.location.href;
    }
}

更改了 getter 以接受 url 参数但是

URIController.href(url)

抛出错误,因为 href 不是函数。

是否可以在 javascript 中将参数传递给 getter?

原文由 John Bernard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 616
2 个回答

Getters 不需要带括号的显式调用,因此不能接受参数。它们的调用是通过标准属性访问语法隐式调用的,例如 URIController.href

来自 MDN 上的 getter 文档

get 语法将对象属性绑定到函数…

  • 它的参数必须正好为零

______

如果您需要接受参数,请改用函数:

 var URIController = {
    href: function (url) {
        return url.location.href;
    }
}

或者使用 ES6 对象函数简写语法:

 const URIController = {
    href (url) {
        return url.location.href;
    }
}

原文由 sdgluck 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据 规范

PropertyAssignment : get PropertyName ( ) { FunctionBody } 的计算如下:

  1. 令闭包是 创建一个新的 Function 对象的结果,如 13.2 中所指定的那样,具有由 FunctionBody 指定的空参数列表 和主体。

所以你不能指定一个参数列表,试图这样做会给你一个语法错误

 var obj = {
    get href(param){}
}

如果你不想设置一个普通的函数,你可以做一些变通方法,比如在 getter 将读取的类实例/对象上设置一个属性。或者您可以在创建对象时使用闭包,然后您的 getter 可以从外部范围访问它。

作为实例/对象属性

 var obj = {
    url:null,
    get href(){
       return this.url ? this.url.location.href : "";
    }
}

obj.url = {location:{href:"http://stackoverflow.com"}};
console.log( obj.href );

带外壳

 function URIController(url){
    //You could also use `Object.defineProperty` to
    //create the getter on a existing object
    return {
       get href(){
          return url.location.href;
       }
    }
}
var obj = URIController({location:{href:"http://stackoverflow.com"}});
console.log( obj.href );

原文由 Patrick Evans 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题