Есть ли способ сделать так, чтобы экземпляры разделяли одну и ту же функцию и в то же время имели приватные переменные?

У меня есть такой кусок кода:

var Human=function(name){
  this._name=name;
};
Human.prototype.Shout=function(){
  alert(this._name);
};

var tom=new Human("tom");
var john=new Human("john");
alert(tom.Shout===john.Shout);

Сейчас ._name не является "приватным". Я хочу сделать ._name "приватным", но в то же время я не хочу создавать дополнительные функции для каждого экземпляра Human (другими словами tom.Shout Must be === to john.Shout), потому что создание дополнительных функций для каждого экземпляра просто ну... не нужно. . ненужным (ок, оффтопик - мы можем обсудить это в другой теме)

Мой вывод: то, чего я пытаюсь достичь (чтобы ._name было "приватным" и в то же время чтобы tom.Shout===john.Shout) невозможно.

Но я просто хочу быть уверенным на 200%, прежде чем делать какие-либо выводы.

(Я приветствую любые хаки при условии соблюдения требований, т.е. без создания дополнительных функций для каждого экземпляра)

Если нам придется создавать дополнительные функции для выполнения scoping, это хорошо, но это число должно быть фиксированным и не должно увеличиваться с каждым дополнительным экземпляром Human.

6
задан Pacerier 14 May 2011 в 00:46
поделиться