如何从类函数内部访问对象属性
How to access object property from inside class function
我在Javascript中的一个类有时需要用Json"更新"。我一直在做一个函数,在给定id的情况下更新数据数组,但现在我想做的是更封装(函数更新,在类中)。
我做的:
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.PcbFile;
不起作用。。。我的对象仍然使用最后一个数据集,而不是更新后的数据集。我创建的函数SET是另一个设置数据的尝试。
ajax没有问题,因为我已经调试了ajaxData,而且(当我更新时)还可以。
那么,如何真正从内部函数访问对象属性data
呢?
(对不起我的英语…)
这是我通过艰苦的方式学到的,你必须小心this
。它总是指当前作用域中的this
,而不是包含对象。每当你在function() { ... }
中包装一些东西时,this
就变成了一个不同的范围。在您的情况下,将对象复制到一个局部变量并操作它的.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();
});
};
}
缓存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();
});
};
}
试试这个:
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();
});
};
}
函数中this
的值取决于该函数的调用方式。例如,当您使用"点"表示法someObj.someMethod()
时,在someMethod()
中,您会将this
设置为someObj
。可以使用.apply()
或.call()
方法将this
显式设置为其他对象。否则,如果使用set(ajaxData)
调用函数,则this
将是全局对象(window
)。
通过在函数外保留对this
的引用(为此,我更喜欢使用变量名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
*/
相关文章:
- 如何访问对象内部的“categoryIds”字段/键,该对象包含mongodb's `ObjectId(s)`数
- 使用js或extjs访问对象的java列表
- Javascript-访问对象
- 访问对象的最简单方法'的单独财产
- 分析云代码访问对象
- 如何从字符串变量访问对象属性
- 访问对象中的数组
- 如何访问对象's成员通过另一种方法填充的方法
- 访问对象内的数组
- 是否可以在定义对象时访问对象值
- Javascript 无法访问对象的属性
- $.each 中的“this”,当需要使用“this”访问对象的函数时
- 函数中的 angularJS 访问对象属性不起作用
- 通过存储在变量中的名称访问对象
- 访问对象内部的数组
- 如何从类函数内部访问对象属性
- 访问对象和指定变量
- Javascript - 使用 for 时遇到问题.以循环访问对象
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 当对象的键中有冒号时,如何访问对象属性