私の質問をする最良の方法は、例をあげることだと思います。Javascriptで、次のシナリオを想像してください。
function Tab(options) {
this.options = options;
}
Tab.prototype.doSomething = function () {
if(...){
//change tab1's options
//tab1.disabled = true
}else{
//change tab2's options
//tab2.disabled = true
}
//call a method on of mySlider instance (NOT myOtherSlider instance)
//mySlider.helloWorld();
}
//slider class
function Slider(options) {
....
}
Slider.prototype.helloWorld = function () {
...
//Access tab1's properties
//tab1.disabled should be "TRUE" since it was changed previously
//Access tab2's properties
...
}
function Accordion() {
this.name = 'accordion';
var tab1 = new Tab({disabled: true}),
tab2 = new Tab({disabled: false),
mySlider = new Slider({color: red}),
myOtherSlider = new Slider({color: blue});
}
他のクラスだけでなく、自分のクラスでインスタンス化されたオブジェクトをすべてのクラスに認識させたいと思います。
重要な部分は、インスタンスを同期することです。たとえば、tab1のプロパティへの変更は、tab1にアクセスする他のオブジェクトに適用/表示する必要があります。
OBJECTMANAGERCLASSを使って自分の質問に答えることができました
function ObjectManager (){
}
ObjectManager.objects = {};
ObjectManager.register = function (name, object) {
var t = this;
t.objects[name] = object;
}
ObjectManager.getObject = function (name) {
var t = this;
return t.objects[name];
}
function Tab () {
this.name = 'tab object';
}
Tab.prototype.init = function (name) {
var t = this;
t.name = name;
}
Tab.prototype.changeProperty = function () {
var tab1 = ObjectManager.getObject('tab1');
tab1.name = 'changed tab1 name';
}
function Accordion() {
var tab1 = new Tab();
tab1.init('tab number 1');
var tab2 = new Tab();
tab2.init('tab number 2');
ObjectManager.register('tab1', tab1);
ObjectManager.register('tab2', tab2);
console.log(ObjectManager.objects);
tab2.changeProperty();
console.log(ObjectManager.objects);
console.log(tab1.name);
}
var accordion = new Accordion();
このソリューションがどれほど効率的かはわかりませんが、それで仕事は終わります