javascript中构造函数和构造函数之间有区别吗?

时间:2014-02-21 00:38:37

标签: javascript constructor

我来自Java背景,完全理解构造函数在java中的作用。我是javascript的新手,并试图理解为什么constructor被称为constructor functionconstructorsconstructor functions在javascript中有不同的含义吗?

3 个答案:

答案 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没有类,函数构造函数更清晰。