Javascript 如何从类函数内部访问对象属性
我的一个Javascript类有时需要用Json“更新”。我一直在做一个函数,在给定id的情况下更新数据数组,但现在我想做的是更封装(函数更新,类内部) 我所做的:Javascript 如何从类函数内部访问对象属性,javascript,class,object,Javascript,Class,Object,我的一个Javascript类有时需要用Json“更新”。我一直在做一个函数,在给定id的情况下更新数据数组,但现在我想做的是更封装(函数更新,类内部) 我所做的: function File(data){ this.data = data; this.update = function (callback){ var set = function(ajaxData){ this.data = ajaxDa
function File(data){
this.data = data;
this.update = function (callback){
var set = function(ajaxData){
this.data = ajaxData.PcbFile;
}
getPcbFile(data.id, function(ajaxData){
set(ajaxData);
callback();
});
};
}
但是,this.data=ajaxData.pcb文件代码>不工作。。。我的对象仍保留最后一个数据集,而不是更新的数据集。我创建的函数集是另一次设置数据的尝试
在ajax上没有问题,因为我调试了ajaxData,并且还可以(当我更新时)
那么,如何真正从内部函数访问对象属性数据
(对不起,我的英语…这是我辛苦学来的,你必须小心使用。它总是指当前范围中的此
,而不是它包含的对象。每当您在function(){…}
中包装某个内容时,这个
将成为一个不同的范围。在您的情况下,将对象复制到局部变量并操作其.data
属性
function File(data){
this.data = data;
var file = this; //call the variable whatever you want
this.update = function (callback){
var set = function(ajaxData){
file.data = ajaxData.PcbFile;
}
getPcbFile(data.id, function(ajaxData){
set(ajaxData);
callback();
});
};
}
试试这个:
function File(data){
this.data = data;
var self = this;
this.update = function (callback){
var set = function(ajaxData){
self.data = ajaxData.PcbFile;
}
getPcbFile(data.id, function(ajaxData){
set(ajaxData);
callback();
});
};
}
函数中此
的值取决于该函数的调用方式。例如,当您使用“点”表示法时,someObj.someMethod()
然后在someMethod()
中,您将this
设置为someObj
。您可以使用.apply()
或.call()
方法将此
显式设置为其他对象。否则,如果使用set(ajaxData)
调用函数,则此
将是全局对象(窗口
)
通过在函数外部保留对this
的引用(为此,我更喜欢变量名self
),您可以在函数内部引用它。缓存this
,以便您可以在同一上下文中在其他地方引用它:
function File(data){
var self = this;
self.data = data;
self.update = function (callback){
var set = function(ajaxData){
self.data = ajaxData.PcbFile;
}
getPcbFile(data.id, function(ajaxData){
set(ajaxData);
callback();
});
};
}
令人惊叹的!工作出色!谢谢!“它始终引用当前范围”-除非它不引用。如果使用.apply()
或.call()
@nnnnnn调用函数,则可以显式地将此
设置为您喜欢的任何对象。是的,但我从未使用过或见过它被使用过。这似乎是解决问题的一种非常高级的方法。我不会用.apply()
或.call()
来解决手头的问题(你可以看到我的答案与你的基本相同),但我在其他情况下也用过。我只是对你使用的语言有点挑剔-请注意,this
指的是一个对象,它与scope不同。虽然我知道“this”指的是新scope中的变化,因此将“this”复制到“thing”中是可行的,但如果我的新“this”在新scope中发生了变化,我的旧“this”应该仍然可以访问,因为它在“旧”的范围内。所以我不能用“this”来指代旧的“this”,但我相信最初的问题是“我怎样才能指代‘old’this”?如果这是一个从另一个类继承的类,我可能会使用super.memberName。所以问题是,我能在不创建副本的情况下访问更高级别的成员吗?解析“this”的值取决于调用函数的方式,该函数包含使用它的任何代码。查看。+1。很高兴看到其他人使用self
来反映变量实际上是对self的引用,而不是常见但(在我看来)可怕的即
,它听起来总是应该引用其他对象。或者,为了向HTML中的某个孩子道歉,thing
,这其实没有任何意义……我主要使用self
,因为它在大多数编辑器中被突出显示为关键字,更容易跟踪,但我同意的更常见,但语义更少。@nnnnnn我认为这并不重要;您只需在使用它的范围内跟踪变量。然而,self
肯定比东西
好,我同意。
(function(){
var accessible = {
prop1: 'blabla',
verify: function(){
console.log( this.prop1);
return this;
},
deepAccess: function(){
return function(){
accessible.prop1 = 'bloblo';
return function(){
console.log("Deep access ", accessible.prop1);
}
}
},
insideFunction: function(){
//here you can use both 'this' or 'accessible'
this.prop1 = 'bleble';
return this;
},
prop2: 3.1415
};
return accessible;
})().verify().insideFunction().verify().deepAccess()()();
/* console shows:
blabla
bleble
Deep access bloblo
*/