Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jqueryselfin数据_Javascript_Jquery - Fatal编程技术网

Javascript jqueryselfin数据

Javascript jqueryselfin数据,javascript,jquery,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(); 函数类(){ var self=这个; 变量$div=$(''); $di

我在以下代码中遇到问题:

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();
函数类(){
var self=这个;
变量$div=$('');
$div.data('obj',self);
this.get=函数(){
返回$div;
}
}
var x=新类();
var$y=x.get();

问题是,我使用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'
函数类(){
var self=这个;
变量$div=$('');
$div.data('obj',self);
var sample=“S”;
this.get=函数(){
返回$div;
}
}
var x=新类();
var$y=x.get();
警报($y.data('obj').sample);// 您的
Class()
构造函数(由
newclass()
调用)创建一个新对象,该对象只有一个方法
.get()
,没有其他属性。在
x
对象上调用
.get()
方法时,该方法尝试返回
this.$div
,但没有名为
$div
的属性。但是,
.get()
方法确实可以访问局部变量
self
$div
,因此请尝试将其更改为:

return $div;
编辑以进行编辑:

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

this.sample = "S";

因此,它实际上是对象的一个属性,可以使用
$y.data('obj').sample
或更简单的
x.sample
访问它(假设
x
是对象的直接引用,不需要经历所有
.data()
无意义的操作).

$div
不是
的属性,它只是可访问范围内的一个变量:

this.get = function() {
    return $div; // remove `this.`
}
尽管名称和值相似,但
$div
变量之间没有关系:

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

您的fiddle有两个语法错误,jQuery库未加载。你能修改你的答案吗?此外,如果您在问题中包含代码,您可能会更快地得到答案。在解决明显的问题后,您会注意到您从未设置
$div
属性,因此
x.get()
不会返回
$div
。我道歉;我试图抽象我的代码-因为它比这更拥挤。我相信我修复了丢失的()和丢失的这个。我不确定JSFIDLE是否还在报告错误,但我的Firebug似乎没有。好了,现在这些语法问题都解决了,您要问的实际问题是什么?请显示不起作用的代码。我更新了我的原始帖子-我修改的代码正在编辑中。但是,我如何返回对整个对象的引用。。。我相信我唯一的选择是使用jQuery的.data函数,否则就不会太糟糕了。@sdadas您指的是哪个对象?因为,您有两个对
Class
-
x
$y.data('obj')
实例的引用都返回到同一个对象。现在,要检索
sample
,需要将其定义为
this.sample
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"