所以我一直在试图找出在Javascript中的原型继承,我仍然困惑的一点。假设我想为具有自己的几个功能的人构造一个构造函数。在JavaScript中构造函数的最佳做法是什么?
function Person(name) {
this.name = name;
this.sayName = function() {
console.log("My name is " + name);
}
}
var john = new Person("John");
john.sayName();
因此,在这种情况下,我已经创建了一个对象,并调用的函数,但是这似乎并没有要做到这一点的有效途径。我已经看到了另外一个例子是这样的:
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function() {
console.log("My name is " + name);
}
var john = new Person("John");
john.sayName();
现在我读过的第二个目的是更有效,因为它没有存储在其内部的sayName功能,取而代之的则是怎么回事了原型链,直到找到它Persons中的原型对象。
我不确定的是我应该用于复杂的构造函数。在我看来,第一个片段比第二个片段更容易阅读,因为它有一个明确的层次结构,但第二个片段据说更有效率。
在现实世界的场景中,哪种风格的构造函数更容易使用?
编辑:我有一个后续问题。有什么办法让第二个片段更具可读性?
**第二**,考虑是否要创建1000个用户。第一个_can_用于单例类(只有一次初始化,单个对象)。 – Tushar
取决于您打算创建的实例的数量。如果它是只有一个实例的一次性对象,则第一种方法很好。否则,您将不必要地在每个实例中存储同一成员函数的多个实例。 – techfoobar
尽量在功能上坚持原型 – Saar