2016-05-15 1 views
3
function User() { 
    this.firstname = null; 

    get getFirst() { 
     return this.firstname; 
    } 
} 

JavaScript консоль дает мне ошибку говоря «Неожиданный идентификатор» в строке 12«Получить» не работает

var Jake = new User(); 
Jake.firstname = "Jake"; 
document.write(Jake.getFirst); 
+2

Я никогда не видел, чтобы получить ключевое слово в javascript. Вы запрограммировали в ActionScript? – NoImaginationGuy

+0

Это геттер, вы можете прочитать об этом подробнее: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/get, вы уверены, что эти геттеры реализованы в среде, которую вы пытаетесь использовать их? – Dimkin

+1

@osnapitzkindle: у JavaScript было рабочее ключевое слово 'get' с 2009 года. –

ответ

0

get предназначен называться внутри объекта, а не функция конструктора , Если вы хотите объявить getFirst как функция на User, то вот один из способов вы можете сделать это:

function User() { 
    this.firstname = null; 
    this.getFirst = function() { 
     return this.firstname; 
    } 
} 

Тогда вы должны были бы назвать getFirst как функцию:

var Jake = new User(); 

Jake.firstname = "Jake"; 

document.write(Jake.getFirst()); 
+0

Но этот вопрос касается того, как заставить его работать как getter, а не как функция. – Xufox

+0

«Геттер» - это просто функция, которая возвращает значение. –

2

Я считаю, проблема заключается в том, что вы используете get с функцией, а не с литералом объекта, как указано в documentation.

var User = { 
    firstName: 'Darren', 
    get getFirst() { return this.firstName; } 
} 

alert(User.getFirst); 

https://jsfiddle.net/ecao51n0/

9

Это просто не синтаксис, используемый для определения поглотителя. Вы бы использовать его в качестве объекта буквального, как это:

var foo = { 
    get bar() { 
     return 42; 
    } 
}; 

foo.bar; // 42 

... но это не там, где ваш get есть.

Чтобы определить это, где ваш get, вы бы использовать defineProperty:

function User() { 
    this.firstname = null; 

    Object.defineProperty(this, "first", { 
     get: function() { 
      return this.firstname; 
     } 
    }); 
} 

Примечание Я назвал его first, не getFirst, потому что это функция сбруи, которая выглядит как прямой доступ собственности и т.д. традиционно не дано имя в форме глагола:

var u = new User(); 
u.firstname = "Paul"; 
u.first; // "Paul" 

Если вы хотите создать функцию с именем getFirst, просто избавиться от get ключевого слова:

this.getFirst = function() { 
    return firstname; 
}; 
// ... 
var u = new User(); 
u.firstname = "Paul"; 
u.getFirst(); // "Paul" 
+2

В 'Object.defineProperty (' ... ')' вы можете написать 'get' вместо' value', и он будет работать как ожидалось. Тем не менее, он по-прежнему будет возвращать 'null' с этим кодом, потому что' firstname' на самом деле не установлен на '' Paul''. – Xufox

+0

@Xufox: LOL, хороший пункт. И спасибо за 'значение' /' get' catch. –