function Person(age,name){
this.name = name;
this.age = age;
this.speak = function(){...}
}
function Person(age,name){
var p = {}
p.name = name;
p.age = age;
p.speak = function(){...}
return p;
}
我看到的唯一区别是使用第一个你必须用new调用以让语言知道它构造一个新对象,它实际上只是构建一个对象,其中'这个'是指正在创建的新对象??
就像这样做。
{
age: 12,
name: "mark",
speak: function(){...}
}
其中第二个返回一个对象,所以你可以写
Person(12,"mark")
而不是
new Person(12,"mark")
所以我想我的问题是,使用第二个版本是否有什么问题,我说的差异是正确的,它们是两者之间的唯一区别吗?
答案 0 :(得分:9)
第一个:
function Person(age,name){
this.name = name;
this.age = age;
this.speak = function(){...}
}
instanceof Person
new
的情况下工作。class
和extends
语法的工作原理,这可能是将来编写大量Javascript的原因。第二个:
function Person(age,name){
var p = {}
p.name = name;
p.age = age;
p.speak = function(){...}
return p;
}
instanceof
。new
调用并且仍然有效(系统创建的新对象将被丢弃)。除了这些差异之外,这两者之间的功能基本相同,而且在技术上没有任何差异"错误"用这两种方法。
Javascript中有两种编程风格的倡导者,有些人会说有一种情况比另一种情况更合适,反之亦然。我建议你为这个对象构建一些子类来清除一些编程差异,因为子类的工作方式也不同。
如果你想搜索关于这个主题的其他文章,这基本上是一个"构造函数与Javascript"中的工厂函数。有时候会误入/反对使用.prototype
,但也倾向于涵盖你的主题。
以下是关于该特定主题的一些文章(涵盖了一系列意见):
JavaScript Constructor Functions Vs Factory Functions
Javascript object creation patterns
In defense of JavaScript’s constructors
Constructor function vs Factory functions
Some Useful JavaScript Object Creation Patterns