数据中的JQuery Self

时间:2012-01-21 04:34:04

标签: javascript 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的.data()函数存储对象“self”数据,但我似乎无法在以后访问它。出了什么问题?

编辑:

以下是我实际应该问的代码:

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'

2 个答案:

答案 0 :(得分:2)

您的Class()构造函数(由new Class()调用)创建一个新对象,其中包含一个方法.get()其他属性。当您在.get()对象上调用x方法时,该方法会尝试返回this.$div,但没有名为$div的属性。但是,.get()方法可以访问局部变量self$div,因此请尝试将其更改为:

return $div;

编辑您的编辑:

$y.data('obj')应该检索对您的对象的引用,但之后您执行我上面讨论的相同操作并尝试访问对象的属性 - .sample - 尚未定义。您需要将sample的定义更改为:

this.sample = "S";

那么它实际上是对象的属性,可以使用$y.data('obj').sample 进行访问,使用更简单的x.sample(假设x是直接引用该对象,不需要经历所有.data()废话)。

答案 1 :(得分: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"