Ответ 1
Итак, у меня есть класс
Javascript не имеет классов. У этого есть наследование прототипа, которое может эмулировать классы в ограниченной степени, но это не стоит исключительно ради эмулирования классов. Гораздо лучше сделать оптимальное использование встроенных языковых функций, а не пытаться подражать javascript другому языку.
Итак, у вас есть конструктор...
Я написал несколько функций, которые я могу назвать так:
var a = new A(); a.getSomething(); a.putSomething(); a.delSomething();
Предположительно, эти методы находятся на A.prototype.
И так далее. Теперь я подумал, что я бы немного его организовал. Поэтому он не стал бы слишком суматошным и выглядел бы как-то вроде этого:
a.something.get(); a.something.put(); a.something.del();
Это не менее захламлено (для меня). Я предполагаю, что есть что-то общее, что что-то сделано, и что его методы get, put и т.д. Хотят работать не на чем-то.
Значение этого параметра задается вызовом, нет другого способа установить его значение, отличное от привязки ES5. Таким образом, вызываемый метод должен иметь доступ к каким-либо образом. Другие ответы показывают, как это сделать с закрытием, но в результате каждый экземпляр должен иметь свой собственный объект и приложенные методы.
Следующее похоже, но избавляет от замыкания и ставит методы на Something.prototype
для некоторой эффективности:
function A(name) {
this.name = name;
this.something = new Something(this);
}
function Something(that){
this.that = that;
}
Something.prototype.get = function() {
return this.that.name;
}
Something.prototype.put = function(prop, value) {
this.that[prop] = value;
}
var a = new A('a');
alert(a.something.get()); // a
a.something.put('name', 'z');
alert(a.something.get()); // z
Таким образом, вы можете иметь несколько somethings, каждый с различными методами put, get и т.д. Но вмешательство чего-то объекта - это просто устройство, которое использует больше памяти (возможно, крошечную сумму) и требует дополнительного символа. Упрощен, чтобы сохранить что-то на A.prototype
и не нужно вводить дополнительную точку (.).