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?
答案 0 :(得分:9)
在您的示例中,您不是调用getter,而是调用名为href
的对象上的函数,该函数不存在。但属性 href
确实存在。
Getters不需要使用括号进行显式调用,因此不能接受参数。它们的调用是通过标准属性访问语法隐含的,例如, URIController.href
。
来自getter documentation on MDN:
get语法将对象属性绑定到函数...
- 必须具有完全零参数
______
如果您需要接受参数,请改用函数:
var URIController = {
href: function (url) {
return url.location.href;
}
}
或使用ES6对象功能的简写语法:
const URIController = {
href (url) {
return url.location.href;
}
}
答案 1 :(得分:4)
不,你不能将参数传递给“getter”而是使用“setter”。
答案 2 :(得分:2)
根据spec
生产PropertyAssignment:get PropertyName(){FunctionBody}的评估如下:
...
- 让闭包成为创建一个新的Function对象的结果 13.2中指定的空参数列表和指定的正文 函数体。
醇>
因此您无法指定参数列表,尝试这样做会给您一个语法错误
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 );