2012-01-21 18 views
-1
我有下面的代碼麻煩

JQuery的自我在數據

function Class() { 
    var self = this; 
    var $div = $('<div/>'); 
    $div.data('obj',self); 

    this.get = function() { 
     return $div; 
    } 
} 

var x = new Class(); 
var $y = x.get(); 

http://jsfiddle.net/t8ZTW/2/

的問題是,我存儲對象的「自我」的數據使用jQuery的。數據()函數,但我似乎無法在以後訪問它。出了什麼問題?

編輯:

以下是我實際上應該問的是代碼:

function Class() { 
    var self = this; 
    var $div = $('<div/>'); 
    $div.data('obj',self); 

    var sample = "S"; 

    this.get = function() { 
     return $div; 
    } 
} 

var x = new Class(); 
var $y = x.get(); 

alert($y.data('obj').sample); // <-- This returns 'undefined' 
+0

你的小提琴有兩個語法錯誤,並沒有加載jQuery庫。你能否修復並編輯你的答案?另外,如果在你的問題中包含代碼,你可能會得到更快的答案。 – mrtsherman

+0

修復了顯而易見的問題後,您會注意到您從未設置過'$ div'屬性,因此'x.get()'不會返回您的'$ div'。 –

+0

我道歉;我試圖抽象我的代碼 - 因爲它比這更擁擠。我相信我修復了失蹤()並且錯過了這個。我不確定jsfiddle是否可以報告錯誤,但是我的Firebug似乎沒有。 – sdasdadas

回答

1

$div不是this屬性 - 相反,它只是在可訪問範圍的變量:

this.get = function() { 
    return $div; // remove `this.` 
} 

儘管類似的名稱和值,這是$div變量之間沒有關係:

function Class() { 
    var $div = $('<div/>'); 
    this.$div = $('<div/>'); 
} 

如果要將變量作爲對象的屬性,則必須在this上定義它:

function Class() { 
    var self = this; 
    var $div = $('<div/>'); 
    $div.data('obj',self); 

    this.sample = "S"; // `this.sample` rather than `var sample` 

    this.get = function() { 
     return $div; 
    } 
} 

var x = new Class(); 
var $y = x.get(); 

alert($y.data('obj').sample); // "S" 
+0

如何返回對整個對象的引用,儘管...我相信我唯一的選擇是使用jQuery的.data函數 - 否則它不會太糟糕。 – sdasdadas

+0

@sdasdadas你指的是哪個對象?原因是,您有2個對'Class' - 'x'和'$ y.data('obj')實例的引用返回到同一個對象。現在,要檢索'sample',它需要被定義爲'this.sample'。 –

2

Class()構造函數(如所謂的new Class())創建有一個方法,.get()一個新對象沒有其他屬性。當您在您的x對象上調用.get()方法時,該方法會嘗試返回this.$div,但不存在名爲$div的屬性。該.get()方法確實,但是,可以訪問本地變量self$div,所以嘗試改變它說:

return $div; 

編輯您的編輯:

$y.data('obj')應檢索到對象的引用,但那麼你做同樣的事情,我在上面談論,並嘗試訪問該對象的屬性 - .sample - 尚未定義。您需要更改的sample的定義是:

this.sample = "S"; 

現在,它實際上是對象的屬性,可以用更簡單的x.sample$y.data('obj').sample訪問(因爲x是直接引用對象並不需要通過所有的廢話)。

+0

我已經編輯它來反映這一點。 – sdasdadas