Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript模块内创建对象_Javascript_Design Patterns - Fatal编程技术网

在javascript模块内创建对象

在javascript模块内创建对象,javascript,design-patterns,Javascript,Design Patterns,我正在学习javascript中的设计模式,但在创建模块时遇到了问题。我正在模块内部创建一个Person对象,并将其与构造函数模式相结合,只是因为我也在学习它,但什么也没发生 谁能帮帮我吗?我不理解我的错误 var myModule = (function () { function Person(id, name) { this.id = id; this.name = name; } Person.prototype.toString

我正在学习javascript中的设计模式,但在创建模块时遇到了问题。我正在模块内部创建一个Person对象,并将其与构造函数模式相结合,只是因为我也在学习它,但什么也没发生

谁能帮帮我吗?我不理解我的错误

var myModule = (function () {
    function Person(id, name) {
        this.id = id;
        this.name = name;
    }

    Person.prototype.toString = function () {
        return "\nID: " + this.Id + "\nName: " + this.name;
    };

    return {
        newPerson: function (id, name) {
            return new Person(id,name);
            console.log(Person.toString());
        }
    };
})();

var x = myModule;

x.newPerson(1, "John");
你应该使用

var myModule = (function () {
    function Person(id, name) {
        this.id = id;
        this.name = name;
    }

    return {
        newPerson: function (id, name) {
            return new Person(id,name);
        }
    };
})();

var x = myModule;

console.log(x.newPerson(1, "John"));
忘掉
toString()
,大多数控制台都可以获取对象,并以更好的方式显示它

在本例中,您希望记录
Person
构造函数的
toString()
,这将产生如下字符串:

"function Person(id, name) {
    this.id = id;
    this.name = name;
}"

但是它不会运行,因为您将它放在
newPerson()
函数中的return语句之后,return语句停止执行并返回结果。

console.log行位于return语句之后。它不会执行。因为您将
toString
方法定义为原型方法,所以它将成为所创建对象的实例属性。这意味着在创建了一个带有
var person=x.newPerson(1,“John”)
您可以像
person.toString()
一样使用它。另外,
toString
定义中的
this.Id
应该是
this.Id