Passing Argument To Javascript Object Getter
Solution 1:
In your example you are not invoking the getter, but rather a function on the object called href
, which doesn't exist. But the propertyhref
does exist.
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:
varURIController = {
href: function (url) {
return url.location.href;
}
}
Or using ES6 object function shorthand syntax:
const URIController = {
href (url) {
return url.location.href;
}
}
Solution 2:
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 = {
gethref(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,
gethref(){
returnthis.url ? this.url.location.href : "";
}
}
obj.url = {location:{href:"http://stackoverflow.com"}};
console.log( obj.href );
With an enclosure
functionURIController(url){
//You could also use `Object.defineProperty` to //create the getter on a existing objectreturn {
gethref(){
return url.location.href;
}
}
}
var obj = URIController({location:{href:"http://stackoverflow.com"}});
console.log( obj.href );
Solution 3:
No, you can't pass an argument to a " getter " use a " setter " rather.
Post a Comment for "Passing Argument To Javascript Object Getter"