2011-05-07 96 views
1

我正在使用jQuery並創建一些OOP Javascript功能。對象和它的構造具有以下結構:jQuery在構造函數中打破「this」?

var zoomin = new Object(); 
zoomin = function() { // This is my constructor 
    this.someFunction(); 
}; 

zoomin.prototype = { 
    someFunction: function() { 
     // More code here 
    } 
}; 

當我創建zoomin的一個實例(如VAR my_zoom =新zoomin()),在構造函數中調用this.someFunction()不工作。看起來jQuery已經佔據了「這個」,這就是爲什麼它正在崩潰。

我真的很感激任何關於如何讓這個工作正常的幫助。

謝謝!

+1

看來你有這個答案的另一個問題:http://stackoverflow.com/questions/5852560/applying-oop-with-jquery。 – 2011-05-07 17:50:46

+5

每當你使用'new Object()'時,上帝就會殺死一個名叫Brendan Eich的人。 – sdleihssirhc 2011-05-07 17:52:21

+1

你的代碼中沒有任何與jQuery相關的東西。發佈一個完整的(但最小的)例子,包括jQuery代碼。 – interjay 2011-05-07 17:56:27

回答

3

您的類定義應該是這樣的:

function zoomin() { // This is my constructor 
    this.someFunction(); 
}; 

對於成員方法定義的,它應該是:

zoomin.prototype.someFunction = function() { 
    // More code here 
}; 

或者:

$.extend(zoomin.prototype, { 
    someFunction : function() { 
     // More code here 
    } 
}); 

希望這會有所幫助。乾杯

1

你的代碼相當混亂。你正在創建一個新的對象,然後將函數分配給同一個變量。所以第一條語句並不是必須的(也不是一個好習慣),然後將對象(包含一些屬性)分配給縮放對象的原型,而不是向其添加屬性(someFunction)。

嘗試這樣定義構造函數:

function zoomin(){ 
// this is your constructor 
} 
zoomin.prototype.someFunction = function(){ 
// this is your method. 
} 

var zm = new zoomin(); 
zm.someFunction(); 
1

查看其他答案,以更清潔的方式來組織這一點。 這個答案只是試圖解決「構造函數中的」jQuerying打破'這個'的概念。

甲功能對象(例如zoomin必須new調用充當構造(構造只是功能,沒有什麼特別的不new)。也就是說,如果在jQuery中使用zoomin作爲回調函數,那麼this將是一個特定的(但是任意的)對象,它可能不是新的對象實例。這可能會導致jQuery打破構造函數的錯覺;然而,它沒有,因爲構造函數沒有被new調用,因此就像一個「正常函數」。

如果使用new fnObject然後this(該fnOjbect函數內)將總是是一個新的 「fnObject」 實例。還有沒辦法讓jQuery改變這一點,即使它真的很努力,真的很難。

另外,zoomin = new Object爲100%無用的,因爲下一行只是分配一個新的值(構造函數對象),以zoomin :-)

編碼愉快。