这个问题可能有一个快速答案,但是,我无法弄清楚我做错了什么。我有一个类 EmailList:
var EmailList = function(id, name, expire_date)
{
var instance = this;
var list_id = id;
var list_name = name;
var expire_date = expire_date;
var is_editing = false;
this.get_list_id = function() { return instance.list_id; }
this.get_list_name = function() { return instance.list_name; }
this.get_expire_date = function() { return instance.expire_date; }
this.is_editing = function() { return instance.is_editing; }
}
当我调用类上的任何方法时,我感到很困惑,例如:
console.log(list.get_list_name());
console.log(list.get_list_id());
结果我得到“未定义”。这是怎么回事?
最佳答案
您没有初始化实例数据。不要声明局部变量来存储参数,而是尝试这样做:
var EmailList = function(id, name, expire_date)
{
var instance = this;
instance.list_id = id;
instance.list_name = name;
instance.expire_date = expire_date;
instance.is_editing = false;
this.get_list_id = function() { return instance.list_id; }
this.get_list_name = function() { return instance.list_name; }
this.get_expire_date = function() { return instance.expire_date; }
this.is_editing = function() { return instance.is_editing; }
}
顺便说一句,更好的方法是消除 instance
变量,将实例方法更改为使用 this
并使用原型(prototype)来定义方法:
var EmailList = function(id, name, expire_date)
{
this.list_id = id;
this.list_name = name;
this.expire_date = expire_date;
this.is_editing = false;
};
EmailList.prototype = {
get_list_id : function() { return this.list_id; },
get_list_name : function() { return this.list_name; },
get_expire_date : function() { return this.expire_date; },
is_editing : function() { return this.is_editing; }
};
这样,您就不会为 EmailList
的每个实例创建单独的成员函数对象。
关于Javascript 类方法返回 'undefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23332081/