Javascript 类方法返回 'undefined'

标签 javascript

这个问题可能有一个快速答案,但是,我无法弄清楚我做错了什么。我有一个类 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/

相关文章:

JavaScript 自动幻灯片放映,尝试获取工作按钮

javascript - 替换本地字符并将其与变量进行比较

javascript - 如何使用(.xlsx 或 .pdf)网址在 react/javascript 中显示(只读)xlsx、pdf 文件?

javascript - 如何在 Kattis 问题解决中分割线?

javascript - this.setState 不会重新渲染 View ReactJS 和 Ruby on Rails

javascript - 尝试播放另一个嵌入式youtube视频时弹出弹出模式的jquery

javascript - 在 Javascript 中设置 Canvas 大小

javascript - 如何在整个圆圈周围添加描边并在 svg 中动画旋转圆圈?

javascript - 在 Angular 引导选项卡中,如何取消选项卡更改?

javascript - 如果没有可用日期,jquery html日历不会从数组中选择日期