我正在用一些方法构建一个库,我有一个方法extend和一个方法load.我喜欢它像这样工作:
Core.extend('name',function(message){
this.innerHTML = message;
});
Run Code Online (Sandbox Code Playgroud)
然后实际运行这个你做的:
Core.load('name','Hey!');
Run Code Online (Sandbox Code Playgroud)
Core.extend()<div>根据名称创建一个具有唯一ID 的元素.我想让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');
}
}
}
Run Code Online (Sandbox Code Playgroud)
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');
}
}
}
Run Code Online (Sandbox Code Playgroud)
该Function.call函数的第一个参数应该是你想设置为什么this对象.
这意味着,你应该改变
extensions[name].call(this, widgetElement, params);
Run Code Online (Sandbox Code Playgroud)
至
extensions[name].call(widgetElement, params);
Run Code Online (Sandbox Code Playgroud)
以传递widgetElement为this对象.
| 归档时间: |
|
| 查看次数: |
4002 次 |
| 最近记录: |