假设我们有一个代码
function Vector ( x, y )
{
this.x = x
this.y = y
}
var Vector = new Vector()
通常可以让对象Vector与其构造函数具有相同的名称吗?
答案 0 :(得分:5)
使用与可实例化函数相同的名称不是一个好习惯,因为
为防止混淆,可以将IIFE作为构造函数。
var vector = new function (x, y) {
this.x = x
this.y = y
};
console.log(vector);
答案 1 :(得分:4)
您的实例遮盖了构造函数。换句话说,除非您尝试通过constructor
实例的Vector
来创建实例,否则无法再访问其构造函数。
function Vector ( x, y )
{
this.x = x
this.y = y
}
var Vector = new Vector()
var AnotherVector = new Vector(); // <-Error here
以上所有内容都会导致混乱和缺乏标准的JS实践。
否-不要这样做。
答案 2 :(得分:4)
为单个实例定义类听起来没用。应该将一个类用作创建同一类型的多个实例的模板。如果要第二个向量,该怎么办?
Vector = function (x, y) {
this.x = x;
this.y = y;
};
Vector = new Vector(1, 2); // ok
Vector = new Vector(4, 3); // error
此外,类通常是您为所有实例定义通用API(一组通用方法)的地方。
Vector = function (x, y) {
this.x = x;
this.y = y;
};
// Note that in old fashioned JavaScript
// you have to define inherited methods
// in a special object called `prototype`.
Vector.prototype.add = function (vector) {
this.x += vector.x;
this.y += vector.y;
};
Vector = new Vector(1, 1);
您实际上并不需要单个实例的此功能。在这里使用类太过分了,您只需编写以下代码即可:
Vector = {
x: 1,
y: 1,
add: function (vector) {
this.x += vector.x;
this.y += vector.y;
}
};
因此,我想说的是用实例覆盖类不是一个好习惯,除非这种模式有一些我从未听说过的有用的应用程序:-)
无论如何,这是在JavaScript中使用类的推荐(老式)方法。如您所见,add
方法在Vector
类的原型中定义了一次,但是我们可以从向量a
和b
中调用它。
Vector = function (x, y) {
this.x = x;
this.y = y;
};
Vector.prototype.add = function (vector) {
this.x += vector.x;
this.y += vector.y;
};
Vector.prototype.toString = function () {
return "(" + this.x + ", " + this.y + ")";
};
a = new Vector(1, 2);
b = new Vector(4, 3);
console.log("a = " + a + " b = " + b);
a.add(b);
console.log("a = " + a + " b = " + b);
b.add(a);
console.log("a = " + a + " b = " + b);
答案 3 :(得分:2)
否,这不是一个好习惯。
由于JavaScript区分大小写,请考虑在变量名称中使用所有小写字母。这样可以确保您永远不会出错,因为您滥用了大写和小写字母,而且打字手指也更容易。
克服此问题的两个标准约定是将每个单词大写并将其填入单词(例如LastName),或用下划线将每个单词分开(例如last_name)。
良好做法:
function Vector ( x, y )
{
this.x = x ;
this.y = y;
}
var vector = new Vector(1, 2);
console.log(vector);
答案 4 :(得分:1)
Vector将不再是一个函数,所以不。您肯定不想这样做。
检查此
function Vector ( x, y )
{
this.x = x
this.y = y
}
var Vector = new Vector()
var Vector2 = new Vector()
答案 5 :(得分:0)
最好以相同的名称命名对象,但以小写字母开头
答案 6 :(得分:0)
由于对象是实例,因此我将它们称为不同的实例。这取决于您的用例,因此如果知道您只有一个实例,则可以这样做。
但是想象一下有多个实例,那么有理由将它们称为不同的实例。
因此,例如,您有一个具有高x
和y
值的对象:
var highVector = new Vector(1000, 1000)
您仍在使用Vector
一词,但现在您知道这是一种Vector
。
值较低的对象可以称为lowVector
,依此类推。