私は、削除方法を追加する方法について私の頭を包み込むことができないようではないことを除いて、ほとんどうまくいっているJavaScriptスクリプト/ライブラリを持っています。スクリプトに「削除」メソッドを実装するにはどうすればよいですか?
//Adds a "widget" to the memory
Core.extend('widget',function(m){
$(window).click(function(){ alert(m); });
});
//Actually loads widget, and will alert "hello world" each click on the body
Core.load('widget', 'hello world');
//*SHOULD* make it so that when I click on the window the alert no longer shows
Core.remove('widget');
ここで私は
var Core = function(){
var debug = function(m){
console.log(m);
}
var errors = false;
var extensions = {};
var listeners = {};
var extend = function(name,func){
name = name || '';
func = func || function(){};
if(typeof extensions[name] == 'undefined'){
extensions[name] = func;
}
else{
if(errors){
throw new Error('Core extend() error: the extension "'+name+'" already exists');
}
}
}
var load = function(name,params){
name = name || '';
params = params || '';
if(typeof extensions[name] !== 'undefined'){
extensions[name](params);
}
else{
if(errors){
throw new Error('Core load() error: the extension "'+name+'" doesn\'t exist');
}
}
}
//Sends out a notification to every listener set with this name
var push = function(name, value){
name = name || '';
value = value || '';
if(typeof listeners[name] !== 'undefined'){
listeners[name].call(this,value);
}
else{
if(errors){
throw new Error('Core push() error: the extension "'+name+'" doesn\'t exist');
}
}
}
//Saves a function to the listeners object to be called by push()
var listen = function(name, callback){
name = name || '';
callback = callback || function(){};
listeners[name] = callback;
}
//Removes an extension from being called
var remove = function(name){
name = name || '';
if(typeof extensions[name] !== 'undefined'){
delete extensions[name];
}
else{
if(errors){
throw new Error('Core remove() error: the extension "'+name+'" doesn\'t exist');
}
}
}
return {
extend:extend,
load:load,
remove:remove,
push:push,
listen:listen
}
}();
を書いているコードです:たとえば、あなたは(jQueryのが追加されただけできれいだし、簡単に例を理解することが、私のスクリプトはjQueryのを必要としない)のようなものは何だろう
例のユースケース:
http://jsbin.com/enopup
ええ、私はアンバインドとremoveEventListenerについて知っていますが、単純な.remove()を使って即座にメソッドを分解するためのメソッドや "デザインパターン"があれば不思議でした。 –