簡體   English   中英

如何讓原型方法訪問父變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM