2010-01-10 39 views
0
(function($) { 

$.fn.myFoo= function (o){ 
    this.element = $(this) 

    options = jQuery.extend({ 
     name: "defaultName", 
     size: 5, 
     global: true 
     }, o); 

    _min = function(){ //am i private method? 
     alert('dud'); 
    } 
    max = function(){ //am i public method? 
     alert('max'); 
    } 
    return this.o(); //o= 'max' 
} 
})(jQuery); 

問題1 =有一個方法調用上述最大值方法/功能,如果我是使用這條線 $('#id').myFoo('max'); 問題2 =我知道,上jquery的部件下劃線「 _「會將該方法標記爲私有。這是$ .fn上的相同情況嗎?jquery的調用從VAR值的函數

請注意此行return this.o();是錯的只是爲了證明我想完成

回答

2

你的代碼是什麼有一些問題:

首先,當你運行它,你最終將有三個全局變量,max,_minoptions

JavaScript是函數範圍的,但您應該使用var語句聲明變量(如果不使用它),並且在作用域鏈中找不到指定的標識符,它們將成爲屬性Globlal對象(window)。第二,我認爲你想調用一個作爲String參數傳遞的函數,如果是這樣的話,我建議你使用一個對象來分組你的函數,並且能夠得到它們,如果你只是定義你的函數作爲變量,它們不是綁定到一個訪問對象(技術上變量,參數和函數聲明標識符綁定到非訪問Variable Object),例如:

(function ($) { 
    $.fn.myFoo= function (o){ 
    var privateFunction = function(){ 
     alert('private'); 
    }; 

    var functions = { 
     _min: function(){ 
     alert('_min'); 
     }, 
     max: function(){ 
     alert('max'); 
     } 
    }; 


    functions[o](); // invoke the function 
    // ... 
    return this; // preserve the jQuery method "chainability" 
    }; 
})(jQuery); 

編輯:如果你想聲明一個「私人函數」(不能通過你的String參數調用),你可以簡單地聲明它是$.fn.myFoo函數中的一個變量。

它可供所有「公共職能」(functions對象的所有成員)使用,但無法使用o參數執行。

+3

+1使用'return this;' – 2010-01-10 02:16:37

+0

謝謝。這有助於我的第一個問題......對於我的第二個問題...... _min原來不是一個私人函數。但是我可以使用substr(0,1)的東西,看看第一個字符=「_」。除非有另一個訣竅:)將函數_min作爲私有函數 – Val 2010-01-10 02:21:48

+1

如果您希望您的'min'函數只能在'$ .fn.myFoo'函數內訪問,但不能通過String參數調用,請將其取出從我的例子中的'functions'對象,並用'var'語句聲明它,即:'var min = function(){}; – CMS 2010-01-10 02:26:19