2012-02-23 55 views
1

這是我的函數的基本版本使用變量從另一個功能(我第一次這樣做,所以我很抱歉,如果我不解釋得很好)如何在jQuery的

var pages = { 
    init:function(){ 

    }, 
    home:function(){ 

     articleid = this.closest("article").attr('id'); 
     skillsbtn = $(this).hasClass("skillsbt"); 
     home = $('#home'); 
     homeheight = '-' + home.height(); 

    if (skillsbtn && articleid == "home"){ 
     home.animate({"marginTop" : homeheight},800); 
    } 
}, 
    work:function(){ 
//same variables are requred here: skillsbtn = $(this).hasClass("skillsbt");... 
    }, 
    skills:function(){ 
//same variables are requred here: skillsbtn = $(this).hasClass("skillsbt");... 
    }, 
    contact:function(){ 

    }, 
} 

所以這個想法是:skillbtn = $(this)指的是$(this)home:function。我試圖複製變量從home:functionwork:function,它醒來很好。但我可以把我的init:function的需要,但能夠在home:function內,並通過這樣稱呼他們的變量,能夠改變什麼都$(this)是,意味着這個 - >主頁,或這個 - >工作

我試圖像pages.init.skillsbtn.call(this)那樣訪問它,但它不能工作。

希望你能幫助 - 感謝

回答

0

您可以使用全局變量遍(其中爲每個home功能四個主要的任務前的var)?

你想分享狀態,你不使用這個對象?這就是他們的目的。 什麼是頁面?如果它是某種'資源庫'或'命名空間',可能使用UpperCase名來區分它不是普通的實例。

由於jQuery的事件this綁定到該事件的源,則不能使用this說白了,但你可以這樣做:

var Pages = { 
    init:function(){ 
     Pages.worker = new PagesWorker; 
     // later if you see fit you can have more of these 
    }, 
    home:function(){ 
     return Pages.worker.home($(this)); 
    }, 
    work:function(){ 
     return Pages.worker.work($(this)); 
    }, 
    skills:function(){ 
     return Pages.worker.skills($(this)); 
    }, 
    contact:function(){ 
     return Pages.worker.contact($(this)); 
    }, 
} 

function PagesWorker(src){ 
    // init 
} 

PagesWorker.prototype.home = function(src){ 

    // use var xxx = yyy for ones local for this function only 
    // use this.xxx = yyy for those that should persist between functions 
    var articleid = src.closest("article").attr('id'); 
    this.skillsbtn = src.hasClass("skillsbt"); 
    var home = $('#home'); 
    var homeheight = '-' + home.height(); 

    if (this.skillsbtn && articleid == "home"){ 
     home.animate({"marginTop" : homeheight},800); 
    } 
}; 

PagesWorker.prototype.work = function(src){ 
    //same variables are requred here: skillsbtn etc. 
    //no problem, use this.skillsbtn etc. 
}; 

PagesWorker.prototype.skills = function(src){ 
    //same variables are requred here: skillsbtn etc. 
    //no problem, use this.skillsbtn etc. 
}; 

PagesWorker.prototype.contact = function(src){ 
    //same variables are requred here: skillsbtn etc. 
    //no problem, use this.skillsbtn etc. 
}; 

如果你是真的相信你會只有一個頁面對象,您可以使用pages.xxx在函數調用和原始代碼之間共享變量。但是,除非你真的確定,否則這是不對的。

+0

感謝兄弟們,我從現在開始學習 – aurel 2012-02-23 09:06:23

+0

所有這些(編程)都可以通過練習和教程學習,還是需要閱讀任何背景信息?爲了做到這一點 – aurel 2012-02-23 09:09:15

+0

我認爲練習是不夠的,沒有某種指導,你會學到很多'黑客'和'快捷方式'。如果你知道你想要什麼,複製粘貼修改就可以工作,但不如長時間學習。你應該閱讀一些書或好博客(雖然我不知道對初學者有好處,但我對www.c2.com或www.martinfowler.com感覺不錯,但這些更多的是關於更高層次的 - 但畢竟,設計是重要的,程序(和編寫它的語言)只是一個實現 - 如果你的設計不好,即使Smalltalk不會幫你做到這一點)。 – 2012-02-23 09:59:47

0

通過聲明它的功能外,並分配給它的函數內部

var globalVar, 
    pages = { 
    init:function(){ 

    }, 
    home:function(){ 

     articleid = this.closest("article").attr('id'); 
     skillsbtn = $(this).hasClass("skillsbt"); 
     home = $('#home'); 
     homeheight = '-' + home.height(); 

    if (skillsbtn && articleid == "home"){ 
     home.animate({"marginTop" : homeheight},800); 
    } 
}, 
    work:function(){ 
//same variables are requred here: skillsbtn = $(this).hasClass("skillsbt");... 
    }, 
    skills:function(){ 
//same variables are requred here: skillsbtn = $(this).hasClass("skillsbt");... 
    }, 
    contact:function(){ 

    }, 
} 

然後分配給任何你想使用全局變量

使變量全球
1

創建另一個對象,其中包含您需要在全局範圍內的變量並將其用作存儲庫。試試這個:

var pages = { 
    init: function() { 
    }, 
    settings: { 
     skillsButton: "test" 
    }, 
    home: function() { 
     this.settings.skillsButton = "value changed in 'home'"; 
    } 
} 

然後,您可以參考settings.skillsButton無論你需要它。

Example fiddle

+0

他在這裏會遇到問題,因爲我看到它'this'指代碼中的DOM元素。 – kapa 2012-02-23 09:00:50