我正在用一些方法構建一個庫,並且我有一個方法extend
和一個方法load
。我想它是這樣工作的:在JavaScript中更改函數「this」的值
Core.extend('name',function(message){
this.innerHTML = message;
});
然後實際運行這一點,你會怎麼做:
Core.load('name','Hey!');
Core.extend()
創建基於名稱的唯一ID的<div>
元素。我想讓this
==生成的<div>
。
我知道.call()
和.apply()
,很明顯,但它不會改變this
它只是改變回調參數。下面是擴展和負載代碼:
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()
注意這是主線: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');
}
}
}
是的!咄!我一直認爲第一個參數是「要修改的東西」。即如果我做了'.call(widgetElement,'duh')',那麼在我的回調中,第一個參數將等於'duh'。謝謝:) P.S.一旦時間流逝,病毒標記爲正確... –