我已经宣布了这个javascript类:
var TablixColumns = function(){
this.g = 'wtf';
this.tablixColumns = []; //[];
return {
addTablixColumn: function(tablixColumn){
alert(this.g);
//this.tablixColumns.push(tablixColumn.getTablixColumn());
}
}
};
我的问题是,当我尝试这个时:alert(this.g)
警报未定义
当然我的初始函数定义是:this.tablixColumns.push(tablixColumn.getTablixColumn());
然后我得到的错误是“No Method push
undefined”
奇怪的是我有这个班级声明:
var TablixColumn = function(){
columnWidth = '<Width>3.135cm</Width>'; //default width value
return{
setColumnWidth: function(width){
this.columnWidth = '<Width>' + width + 'cm</Width>';
},
getTablixColumn: function(){
return '<TablixColumn>' + this.columnWidth + '</TablixColumn>';
}
}
};
并且TablixColumn类工作正常, 是的,我已声明this.g和this.tablixColumns没有'this'。部分,但它只是拒绝工作! 如果今晚不起作用,我会杀人吗能有人帮帮我吗?
答案 0 :(得分:1)
您需要在嵌套函数表达式之外设置对当前对象(this
)的引用。以下是代码的外观:
var TablixColumns = function() {
...
var self = this;
return {
addTablixColumn: function(tablixColumn) {
alert(self.g);
}
};
};
如果需要,您甚至可以将属性设置为返回的对象文字:
// ...
return {
g: 'wtf',
addTablixColumn: function(tablixColumn) {
alert(this.g); // 'wtf'
}
};
// ...
请注意,如果您从此处返回,则不应使用TablixColumns
作为构造函数。你在这里使用两个成语;原型继承和模块模式。你打算用new
实例化构造函数吗?如果是这样,那么不要返回对象文字。而是在函数的原型上设置方法:
var TablixColumns = function() {
this.g = 'wtf';
this.tablixColumns = [];
};
TablixColumns.prototype.addTablixColumn = function addTablixColumn() { ... };
TablixColumns.prototype./* ... */
...
否则,请勿在构造函数中使用this
。只需将属性设为常规变量即可。
答案 1 :(得分:0)
好的,所以我想出了我的问题:
所有对当前实例变量的引用都不应该以{{1}}关键字开头
所以这就是我的宣言现在的样子:
this.
感谢@Bergi指出这个