在javascript模块内创建对象
我正在学习javascript中的设计模式,但在创建模块时遇到了问题。我正在模块内部创建一个Person对象,并将其与构造函数模式相结合,只是因为我也在学习它,但什么也没发生 谁能帮帮我吗?我不理解我的错误在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
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
。