将参数传递给 JavaScript 对象 Getter
Passing Argument to JavaScript Object 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?
在您的示例中,您没有调用 getter,而是调用对象 href
上的一个函数,该函数不存在。但是 属性 href
确实存在。
Getter 不需要使用括号显式调用,因此不能接受参数。它们的调用是通过标准 属性 访问语法隐式调用的,例如URIController.href
.
来自getter documentation on MDN:
The get syntax binds an object property to a function...
- It must have exactly zero parameters
______
如果您需要接受参数,请改用函数:
var URIController = {
href: function (url) {
return url.location.href;
}
}
或者使用ES6对象函数shorthand语法:
const URIController = {
href (url) {
return url.location.href;
}
}
不,您不能将参数传递给“getter”,而是使用“setter”。
根据 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.
因此您不能指定参数列表,尝试这样做会导致语法错误
var obj = {
get href(param){}
}
如果你不想设置一个正常的功能,你可以做一些解决方法,比如在 class instance/object 上设置一个 属性,然后 getter读。或者您可以在创建对象时使用闭包,然后您的 getter 可以从外部范围访问它。
作为 instance/object 属性
var obj = {
url:null,
get href(){
return this.url ? this.url.location.href : "";
}
}
obj.url = {location:{href:"http://whosebug.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://whosebug.com"}});
console.log( obj.href );
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?
在您的示例中,您没有调用 getter,而是调用对象 href
上的一个函数,该函数不存在。但是 属性 href
确实存在。
Getter 不需要使用括号显式调用,因此不能接受参数。它们的调用是通过标准 属性 访问语法隐式调用的,例如URIController.href
.
来自getter documentation on MDN:
The get syntax binds an object property to a function...
- It must have exactly zero parameters
______
如果您需要接受参数,请改用函数:
var URIController = {
href: function (url) {
return url.location.href;
}
}
或者使用ES6对象函数shorthand语法:
const URIController = {
href (url) {
return url.location.href;
}
}
不,您不能将参数传递给“getter”,而是使用“setter”。
根据 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.
因此您不能指定参数列表,尝试这样做会导致语法错误
var obj = {
get href(param){}
}
如果你不想设置一个正常的功能,你可以做一些解决方法,比如在 class instance/object 上设置一个 属性,然后 getter读。或者您可以在创建对象时使用闭包,然后您的 getter 可以从外部范围访问它。
作为 instance/object 属性
var obj = {
url:null,
get href(){
return this.url ? this.url.location.href : "";
}
}
obj.url = {location:{href:"http://whosebug.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://whosebug.com"}});
console.log( obj.href );