我正在用一些方法构建一个库,并且我有一个方法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.一旦时间流逝,病毒标记为正确... –