0
我的總體目標是讓指定的動物(貓1)發出聲音(警告框)並獲取另一個特定的動物(狗1)來傾聽貓發出的聲音用他的聲音回覆。JavaScript回調和範圍(參考正確的東西)
在下面的代碼中,我嘗試使用bind命令來實現我的回調。
Ext.define('Animal',
{
name: 'Unknown',
sound: 'Unknown',
listening: this.listening,
constructor: function(name)
{
if (name)
{
this.name = name;
}
},
makeSound: function()
{
alert(this.name + " says " + this.sound);
if(this.listening)
{
this.listening();
}
},
isListening: function(listening)
{
this.listening = listening;
}
});
Ext.define('Cats',
{
extend: 'Animal',
name: 'Unknown',
sound: 'Meow',
listening: this.listening,
listen: function()
{
if(this.listening)
alert(this.name + "is listening.");
}
});
Ext.define('Dogs',
{
extend: 'Animal',
name: 'Unknown',
sound: 'Woof',
listening: this.listening,
listen: function()
{
if(this.listening)
alert(this.name + "is listening.");
}
});
var cat1 = Ext.create('Cats', 'Domino');
var cat2 = Ext.create('Cats', 'Tiger');
var dog1 = Ext.create('Dogs', 'Bruno');
var dog2 = Ext.create('Dogs', 'Spot');
dog1.listen = dog1.listen.bind(dog1); //failed miserably, not sure of the proper usage,
cat1.isListening(dog1.listen); //I saw an example using this format.
cat1.makeSound();
cat2.makeSound();
dog1.makeSound();
dog2.makeSound();
當然,這並沒有爲我工作,但它可能是作爲bind命令的不正確使用簡單(在控制檯中沒有錯誤做出有時要告訴) 的方式我真的想實現這一目標如下:(下面代碼中的註釋說明它非常好)
Ext.define('Animal',
{
name: 'Unknown',
sound: 'Unknown',
listening: this.listening,
constructor: function(name)
{
if (name)
{
this.name = name;
}
},
makeSound: function()
{
alert(this.name + " says " + this.sound);
},
listen: function(obj)
{
if(this.listening)
alert(obj.name + " is listening to " + this.name + ".");
}
});
Ext.define('Cats',
{
extend: 'Animal',
name: 'Unknown',
sound: 'Meow',
});
Ext.define('Dogs',
{
extend: 'Animal',
name: 'Unknown',
sound: 'Woof',
});
var cat1 = Ext.create('Cats', 'Domino');
var cat2 = Ext.create('Cats', 'Tiger');
var dog1 = Ext.create('Dogs', 'Bruno');
var dog2 = Ext.create('Dogs', 'Spot');
//some callback that will wait for a specific animal to make a sound
//and call the listen function in an intelligent way so I get this.name
//to be the animal that made that sound and the obj.name to be the
//animal that is listening
cat1.makeSound();
cat2.makeSound();
dog1.makeSound();
dog2.makeSound();
這需要我的使用權範圍,當然我不知道如何處理。 主要我希望在這方面有所幫助,同時遠離自定義事件回調。 任何幫助表示讚賞。
是的,我最終使用Observable類來處理它。謝謝。 – FailedFace