2016-03-05 214 views
3

我有情況如下JS類型錯誤:不是一個函數

function Field(data){ 
    var name = data.name; 
    this.foo = function(){ 
     console.log("foo");  
    } 
} 
... 
field = new Field(someData); 
... 
console.log(field.name); //returns its name as expected 
field.foo(); //TypeError: field.foo is not a function 

與有什麼問題嗎?我在angularjs應用程序中使用它。

我後端開發人員,所以請理解。

+1

你似乎從來沒有設置初始化對象的'name'屬性。我不確定那麼這個屬性的存在是預期的。我想這跟你所問的問題有某種關係。你確定代碼中沒有你沒有發佈的東西嗎?就像構造函數結尾的'return data'一樣? –

+2

https://jsfiddle.net/7Ldp9gso/ foo方法按預期工作,它的'.name'不會與該代碼一起工作。 – GillesC

+1

@GillesC你怎麼知道。你不知道傳入的是什麼。顯然,如果OP沒有在'.name'中得到一個錯誤,那麼就有一個名字鍵傳入的對象。手頭的問題是,函數內部創建的變量是一個私有變量。 – Michelangelo

回答

1

您需要將name分配給當前上下文(this)。但是,foo()函數應該像你在你的問題中那樣工作。看到這個代碼片段作爲示範:

function Field(data) { 
 
    this.name = data.name; 
 
    this.foo = function() { 
 
    document.writeln('foo' + '<br />'); 
 
    } 
 
} 
 

 
var someData = { name: 'MyName' }; 
 
var field = new Field(someData); 
 
document.writeln(field.name + '<br />'); 
 
field.foo();

+0

是的,你說得對,謝謝你的代碼片段,它必須是我的angularjs上下文。 – bladekp

相關問題