我来自Java背景,完全理解构造函数在java中的作用。我是javascript的新手,并试图理解为什么constructor
被称为constructor function
。 constructors
和constructor functions
在javascript中有不同的含义吗?
答案 0 :(得分:1)
Java构造函数是只能在创建对象时调用的特殊函数; JavaScript“构造函数”只是标准函数。
答案 1 :(得分:1)
JavaScript中的构造函数是用于构造对象的函数。例如:
function Obj() {
// The constructed object is bound to the 'this' variable
this.property = "someValue";
}
var obj = new Obj();
console.log(obj.property); // Will print "someValue"
console.log(obj.constructor); // Will print Obj's code
Obj
现在是实例obj
的构造函数。 Obj只是一个普通函数,但由于它是通过new
调用的,因此它充当构造函数。
请注意,构造函数按惯例命名为Java类,即Upper CamelCase。该语言不以任何方式强制执行,但它清楚地表明函数是作为构造函数。
您也可以在JavaScript中实现继承,即使该语言本身缺少类,也可以通过定义构造函数的“原型”来实现:
// Base constructor, like a baseclass in Java
function Base() {
this.baseProperty = "baseValue";
}
// Base implementation of a method
Base.prototype.printSelf = function () {
console.log(this.baseProperty);
};
// Constructor, corresponding to a subclass in Java
function Obj() {
// Call "baseclass" constructor
Base.call(this);
this.property = "someValue";
}
// Inherit prototype from Base
Obj.prototype = Object.create(Base.prototype);
// Overload printSelf
Obj.prototype.printSelf = function () {
// Call base implementation
Base.prototype.printSelf.call(this);
console.log(this.property);
};
var obj = new Obj();
obj.printSelf();
如果您愿意,请参阅我的fiddle进行现场演示。
答案 2 :(得分:0)
JS没有特殊的处理或类型调用函数构造函数。这个术语用于表示此函数与new关键字一起使用以创建对象。任何函数都可以是“函数构造函数”,前缀为new关键字。
当然,这通常不是作者的意图。因此,惯例是将函数名的第一个字母大写,以表示它是一个函数构造函数,因此应该与w / new结合使用。
术语构造函数通常用于表示函数构造函数。社区中的大多数人使用术语完整术语,因为JS没有类,函数构造函数更清晰。