Je cette définition de TabList
:JavaScript confusion portée
MyApp.TabList = function (selector) {
var private = {
$list: $(selector),
tabs: []
};
this.add = function (tab) {
private.tabs.push(tab);
};
};
Quand j'appelle cela, cependant, et de briser dans le corps de this.add
, private
ne figure pas dans le champ d'application locale:
MyApp.tabs = new MyApp.TabList("#tabs");
$("#tab-add").click(function() {
MyApp.tabs.add(new MyApp.Tab("title"));
});
Est-ce que private
ne reste pas à l'intérieur de l'objet?
Si ce code fonctionne de manière autonome comme ci-dessus, j'ai peut-être manqué quelque chose — J'ai essayé simplement de le faire de mon mieux à des fins démonstratives.
@Agile Généralement, vous voulez mettre fin aux fonctions du constructeur avec 'return this;'. Je ne pense pas que cela fasse une différence, mais c'est une bonne pratique (d'après ce que j'ai entendu). –
@Agile La variable 'private' n'est pas supposée être dans la portée locale de la fonction' add' - elle est dans sa portée externe (la portée de la fonction 'TabList' du constructeur). –
@ Šime Vidas: hein? Pourquoi ferais-tu ça? Pourvu que vous utilisiez 'new', il n'est jamais nécessaire de le faire. Vous ne feriez cela que si vous le faites fonctionner sans le mot clé 'new'. –