我遇到以下代码时出现问题:
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();
问题是我使用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'
答案 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"