Passing Argument to JavaScript Object Getter
As per the spec
The production PropertyAssignment : get PropertyName ( ) { FunctionBody } is evaluated as follows:
...
- Let closure be the result of creating a new Function object as specified in 13.2 with an empty parameter list and body specified by FunctionBody.
So you cannot specify a parameter list, attempting to do so will give you a syntax error
var obj = {
get href(param){}
}
If you do not want to setup a normal function you could do a couple workarounds like set a property on the class instance/object that the getter would then read. Or you could use a closure upon creating your object then your getter could access it from the outer scope.
As an instance/object property
var obj = {
url:null,
get href(){
return this.url ? this.url.location.href : "";
}
}
obj.url = {location:{href:"http://stackoverflow.com"}};
console.log( obj.href );
With an enclosure
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 );
Getters do not require explicit invocation with parentheses and cannot therefore accept arguments. Their invocation is implicit via standard property access syntax, e.g. URIController.href
.
From getter documentation on MDN:
The get syntax binds an object property to a function...
- It must have exactly zero parameters
______
If you need to accept arguments, use a function instead:
var URIController = {
href: function (url) {
return url.location.href;
}
}
Or using ES6 object function shorthand syntax:
const URIController = {
href (url) {
return url.location.href;
}
}