2017-02-02 30 views
0

我想通过函数创建我的对象,但我无法弄清楚getter函数的语法。函数内的Javascript getter函数

var myObject = 
{ 
    0:123, 

    get a() 
    { 
     return this[0]; 
    } 
} 


console.log("This works: " + myObject.a); 


function test() 
{ 
    this[0] = 123; 

// error 
    this.a = get function() 
    { 
    return this[0]; 
    }; 
} 


var myTest = new test(); 

console.log(myTest.a); 

在测试功能,get函数的分配抛出一个缺少分号错误,如果我删除关键字“功能”,它说,得到的是没有定义。

如何为我的函数中的当前对象分配getter函数?

+0

我不认为'变种F =获取函数(){...} '语法是正确的,用'var f = get {...}'代替。您的函数'test'无法解析,而删除'function()'使其起作用 – Aaron

+1

由于这不是用于[定义getter]的正确语法(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters) –

回答

2

你可以尝试这样的事:

var myObject = 
{ 
    0:123, 

    get a() 
    { 
     return this[0]; 
    } 
} 


console.log("This works: " + myObject.a); 


function test() 
{ 
    this[0] = 123; 

    Object.defineProperties(this, {"a": { get: function() { 
     return this[0]; 
    }}}); 
} 


var myTest = new test(); 

console.log(myTest.a); 
+0

是否有一种类似于我正在尝试执行的简化版本,或者这是唯一方法? – John

+0

我不这么认为。您只能使用对象文字的简短方式。 \t这是尽可能接近,在这种情况下,你不会传回'这'。 功能测试(){ \t \t 返回\t \t {\t \t \t “0”:123, \t \t得到(){ \t \t \t返回这个[ “0”]; \t \t} \t \t \t \t \t} \t} –

0

也许这会为你工作:

 function test() 
     { 
      this[0] = 123; 

      Object.defineProperty(this, "a", { get: function() { return this[0]; } }); 
     }