Bazı yöntemler içeren bir kütüphane yapıyorum ve extend
yöntemini ve load
yöntemini kullanıyorum. Ben böyle çalışmak isteriz:JavaScript'te "this" değerini değiştirin
Core.extend('name',function(message){
this.innerHTML = message;
});
Sonra aslında bu yapacağın çalıştırmak için:
Core.load('name','Hey!');
Core.extend()
adına göre benzersiz bir kimliğe sahip bir <div>
öğesi oluşturur. Oluşturulan <div>
this
== yapmak istiyorum.
.call()
ve .apply()
hakkında biliyorum, ancak this
değişmiyor, yalnızca geri arama parametrelerini genişletiyor. extensions[name].call(this,widgetElement,params);
var load = function(name,params,sel){
name = name || '';
params = params || '';
sel = sel || '';
if(typeof extensions[name] !== 'undefined'){
var widgetElement = document.createElement(settings.widgetWrapperElement);
widgetElement.setAttribute('id',settings.prefixOnWidgetId+name);
sel.appendChild(widgetElement);
extensions[name].call(this,widgetElement,params);
}
else{
if(errors){
throw new Error('Core load() error: the extension "'+name+'" doesn\'t exist');
}
}
}
: Bu ana hattı
Core.extend()
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');
}
}
}
Core.load()
Not: Burada uzatmak ve yük için kod
EVET! Yaa! Her zaman ilk paramın "neyin değiştirileceğini" düşündüm. Yani Eğer .call (widgetElement, 'duh') 'yapsaydım, o zaman benim geridönüşümde ilk param' duh 'olurdu. Teşekkürler :) Zaman geçtikten sonra doğru olarak işaretleyeceğim ... –