javascript - 为什么我得到未定义的构造函数

标签 javascript

我尝试遵循 Stephan Stoyanov 关于 JavaScript 设计模式的书。本书中的一个示例与此类似:

var MyClass = (function () {
    var Constr, cnt = 0;
    Constr = function () {};    
    Constr.id = function () {
        return "myid-" + cnt;
    };
    Constr.prototype = {
        constructor: MyClass // <-- Please, pay attention
    };
    return Constr;
}());

但是,当我这样使用这段代码时:

var tst = new MyClass();
console.log(tst.contructor);

我在控制台中看到 undefined。为什么会这样?我该如何解决?

最佳答案

当您将 MyClass 分配给原型(prototype)的 .constructor 属性时,变量 MyClass 尚未初始化。在您的函数执行完成之前,它不会有值。相反,您可以只分配给它 Constr,因为它确实有一个值,并且它们将与最终分配给 MyClass 的值相同。

var MyClass = (function () {
    var Constr, cnt = 0;
    Constr = function () {};    
    Constr.id = function () {
        return "myid-" + cnt;
    };
    Constr.prototype = {
        constructor: Constr // <-- Change to this
    };
    return Constr;
}());

关于javascript - 为什么我得到未定义的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117933/

相关文章:

javascript - 如何在 JavaScript 本地存储中逐行存储所有内容?

javascript - Backbone.js - 集合请求事件未触发

javascript - Ubuntu 上 Apache 服务器上的 Proxypass 套接字 io

Javascript - 原语是如何工作的

javascript - 我的数据库中有两个标题,我需要一个 while 循环,我想显示多折叠标题我在数据库中有多少标题记录

javascript - Electron - 创建后更改窗口设置

javascript - 'npm i' 和 'npm install' 有什么区别?

javascript - TypeScript/JavaScript 中的模块和命名空间有什么区别?

javascript - 我失去了 $scope 值

javascript - 在 vuejs 中使用 jquery 插件,而不使用 webpack?