2011-03-24 4 views
0

Si j'écris deux constructeurs comme ces ci-dessous:question Constructor javascript

Person(name, age) { 
    this.name = name; 
    this.age = age; 
    sayName = function() { 
     alert("hello"); 
    }; 
} 

et

Person(name, age) { 
    this.name = name; 
    this.age = age; 
    this.sayName = function() { 
     alert("hello"); 
    }; 
} 

Quelle est la différence? Est-ce que

sayName

signifie vraiment quelque chose dans le premier code? Est-ce utile?

+0

Lorsque vous posez des questions sur les livres, s'il vous plaît inclure des informations sur le travail. Il aide les gens à vous aider, ainsi que d'attribuer correctement le code. Dans ce cas, l'exemple provient de * Professionnel JavaScript pour les développeurs Web, deuxième édition * par Nicholas C. Zakas (Wrox, 2009), page 152. – Dori

Répondre

-1

sayName dans le premier code est privée globale fonction, tandis que dans la seconde c'est une fonction publique privilégiée.


Mise à jour # 1:

Le code suivant résume assez bien ce qu'ils veulent dire

function Person(name, age) { 
    this.name = name; 
    this.age = age; 
    sayName = function() { //define in global name-space 
    alert("hello"); 
    } 

    var sayNamePvt = function() { //private function 
     alert("hello pvt"); 
    } 

    this.callPvt = function(){ //shows how privilege function can access private vars and functions 
     sayNamePvt(); 
    } 
} 


function Person1(name, age) { 
    this.name = name; 
    this.age = age; 
    this.sayName = function() { //privilege public function 
     alert("hello1"); 
    } 
} 


var one = new Person('abc', 12); 
var two = new Person1('abcd', 11); 
two.sayName();//privileged public access 
sayName(); //global access 
//one.sayName(); //ERROR: one.sayName is not a function 
//one.sayNamePvt(); //ERROR: one.sayNamePvt is not a function 
one.callPvt(); //privileged method can call private functions 
+2

en fait puisqu'il n'y a pas de mot clé 'var' c'est une fonction globale – qwertymk

+0

@qwertymk woops. raté la ligne fine. – Nishant

+0

@jsnewman mise à jour réponse, des excuses pour la réponse foiré plus tôt. – Nishant