Я узнаю о прототипе JS.Понимание прототипа javascript
Если я установил прототип конструктора (A) из экземпляра какого-либо другого конструктора (B), будет ли этот экземпляр (из B) вводить общие свойства в A?
Пример 1
function A(){
var private = '';
this.getPrivate = function(){
return private
};
this.setPrivate = function(_private){
private = _private;
};
}
function B(){};
B.prototype = new A();
b1 = new B();
b2 = new B();
b1.setPrivate(new Date());
b2.getPrivate(); // Here `private` is behaving as singleton property. Why?
Пример 2
function A(){
var private = '';
}
A.prototype.getPrivate = function(){
return this.private
};
A.prototype.setPrivate = function(_private){
this.private = _private;
};
function B(){};
B.prototype = new A();
b1 = new B();
b2 = new B();
b1.setPrivate(new Date());
b2.getPrivate(); // This time private is not singleton property.
я обнаружил этот новый аспект прототипа, играя с ним.
- В примере 1, поэтому
private
свойство распределяется между различными экземплярамиB
? - В примере 2, почему
private
свойство имеет независимое присутствие в обоих случаях? Однако исходное свойство не изменяется, но геттер/сеттер определяются через прототип. - Можно ли считать пример 1 реализацией одноэлементных свойств?
- Прототипирование через экземпляр и прототипирование через прототип, в чем разница? например
B.prototype = new A();
B.prototype = (new A()).constructor.prototype
- Каковы полные секреты прототипирования?
Да, простой объектный литерал может быть преднамеренным выбором для объекта singleton. Но частичные одноэлементные свойства могут быть реализованы таким образом. У меня есть сценарий, в котором разные объекты fx содержат изолированные конфигурации, но разделяют ссылку на элементы dom, на которых они работают. –
@ShuaibNawaz Я не знаком с понятием * partial * singleton: P – Esailija
Я не собираюсь монетовать новый термин. : D Я имею в виду определение нескольких общих свойств среди экземпляров, и это сработало для моего сценария, и я не совсем понял его концепцию. В любом случае, спасибо. –