2016-03-05 215 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

相关问题