2016-05-15 87 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:自2009年以來,JavaScript的工作「獲得」關鍵字。 –

回答

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

「getter」只是一個返回值的函數。 –

2

我相信問題在於你使用的是get,而不是documentation中概述的對象字面值。

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

alert(User.getFirst); 

https://jsfiddle.net/ecao51n0/

9

這只是不能用來定義一個getter的語法。你會使用它的對象字面,像這樣:

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:大聲笑,好點。並感謝'value' /'get' catch。 –