2013-03-01 10 views
1

Я относительно новичок в программировании на Javascript. Я работаю над примером, и мне трудно вызвать метод для объекта из HTML. Я подозреваю, что это имеет какое-то отношение к определению или экстернализации методов, но я не уверен.вызов метода javascript объекта из html

index.html:

<script type="text/javascript"> 
var f = new Fred(); 
f.bar(); 
f.foo(); 
</script> 

Fred.js:

function Fred() { 
this.a = 1; 

function foo() { 
    if (a == 1) { 
     a++; 
    } 
    var e = 0; 
} 

this.bar = function() { 
    var a = 3; 
    var b = 4; 
}; 

this.c = 3; 
this.d = 4; 

}

Призыв к bar() работ, вызов foo() не делает.

ответ

1

Ваш не назначающий function pointer в foo. Измените его на

this.foo = function() { 
    if (a == 1) { 
     a++; 
    } 
    var e = 0; 
}; 

как вы сделали:

this.bar = function() { 
    var a = 3; 
    var b = 4; 
}; 
2

Да, вы правы, это надо делать с обзорными и концепцией закрытия. Вы можете думать о функции foo() как о «приватном» методе, если вы знакомы с другими объектно-ориентированными языками, такими как Java или C#. Он доступен только в пределах вашего объекта Fred(). Функция bar() является «общедоступной» в том смысле, что объявление ее с помощью this.bar добавляет ее к общедоступным свойствам вашего объекта Fred(). Таким образом, чтобы также сделать foo() «общественность», а затем объявить его как:

this.foo = function() { 
    if (a == 1) { 
     a++; 
    } 
    var e = 0; 
} 

Для более глубокого объяснения замыканий в JavaScript, попробуйте эту ссылку: http://www.sitepoint.com/javascript-closures-demystified/

+0

Спасибо, я полагал, что я мог бы сделать это, но я хотел понять, почему. Также объясняется, почему я мог ссылаться как внутри объекта. Спасибо за указатель на закрытие. – user2085050

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