[英]How to give prototype method access to parent variables?
我有一個小的庫,可以在特定的DOM元素上執行方法。 看起來有點像這樣:
//An accessor method for the library
window.$ = function(selector){
var new_instance = new lib();
return new_instance.init(selector);
}
//And the actual library...
function lib(){
this.context = window;
this.init = function(sel){
this.context = document.querySelector(sel);
return this;
};
this.addPlugin = function(name, fn){
lib.prototype[name] = fn;
return this;
};
}
像原型或jQuery一樣,您可以通過$(_selector_)
調用來選擇元素。 要將方法添加到庫中,可以使用lib.addPlugin(...)
方法。 不幸的是,當我添加這樣的方法時:
lib.addPlugin('foo',function(){
console.log(this.context);
return this;
});
THIS
關鍵字引用window
,而不是原始的父庫實例。 我對所有原型的工作原理並不了解,但是我想知道是否有某種方式可以解決/解決這個問題。 我希望新添加的方法能夠引用父庫的變量。
不要在構造函數中重新定義函數,而是在每次調用$
時都創建一個閉包,這會占用大量內存。
無論如何,除了addPlugin是實例方法,而不是我實現的靜態方法之外,我沒有看到任何其他問題:
function lib(){
this.context = window;
}
lib.addPlugin = function(name, fn){
this.prototype[name] = fn;
return this;
};
lib.prototype.init = function(sel){
this.context = document.querySelector(sel);
return this;
};
jsfiddle: http : //jsfiddle.net/rAasm/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.