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"