Tôi đang xây dựng thư viện với một số phương pháp và tôi có phương thức extend
và phương thức load
. Tôi muốn nó hoạt động như thế này:Thay đổi giá trị "này" chức năng trong JavaScript
Core.extend('name',function(message){
this.innerHTML = message;
});
Sau đó, để thực sự chạy này, bạn sẽ làm:
Core.load('name','Hey!');
Core.extend()
tạo ra một yếu tố <div>
với một id duy nhất dựa vào tên. Tôi muốn thực hiện this
== số <div>
được tạo.
Tôi biết về .call()
và .apply()
, hiển nhiên, nhưng nó không thay đổi this
nó chỉ thay đổi thông số gọi lại mở rộng. Dưới đây là đoạn code cho mở rộng và tải:
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()
Lưu ý đây là dòng chính: 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');
}
}
}
CÓ! Duh! Tôi đã luôn luôn nghĩ param đầu tiên là "những gì để sửa đổi". I E. nếu tôi đã làm '.call (widgetElement, 'duh')' thì trong hàm gọi lại, tham số đầu tiên sẽ bằng 'duh'. Cảm ơn :) P.S. Đánh dấu là đúng khi thời gian trôi qua ... –