2017-02-02 13 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); 

В тестовой функции, назначение функции ПОЛУЧИТЬ бросает недостающую ошибку точки с запятой, и если удалить ключевое слово «функция», он говорит, что прибудут не определен.

Как я могу назначить функцию геттера текущему объекту в моей функции?

+0

Я не думаю, что 'уаг п = получить функцию() {...} 'syntax правильный, вместо этого используйте' 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]; } }); 
     } 

 Смежные вопросы

  • Нет связанных вопросов^_^