2016-03-05 3 views
3

Я имею ситуацию следующим образомJS TypeError: не является функцией

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' свойство инициализируется объекта. Я не уверен, что ожидается присутствие этого свойства. Думаю, тогда это как-то связано с вопросом, о котором вы спрашиваете. Вы уверены, что в коде нет ничего, что вы не разместили здесь? Как «вернуть данные» в конце функции конструктора? –

+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

Да, вы правы, спасибо за фрагмент, это должно быть что-то с моим угловым контекстом. – bladekp

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