Javascript:在允许的构造函数中调用方法/函数?

时间:2015-06-15 12:42:49

标签: javascript constructor

我想知道JavaScript是否允许在使用构造函数构造对象的过程中调用函数或方法,因为它的工作只是创建对象。

示例:

function Animal(name) {
  this.name = name;

  alert("I am called in the constructor-function. Is it allowed?"); 
}

var x = new Animal("Bird");

这样可以正常工作(它会创建对象并提醒消息)但是可以这样做吗?

3 个答案:

答案 0 :(得分:3)

当然!

构造函数就像任何其他函数一样,除了它们设置对象。您可以从它们中调用您需要/想要的任何内容(在某些情况下/语言甚至是该对象的另一个构造函数)

为了在JavaScript中进行调试,警报很好。

答案 1 :(得分:0)

是的,的确如此。 “构造函数”实际上是一个初始化例程,在对象物理分配到内存中以便设置初始值之后调用。因此,您可以在其中调用其他方法,但我通常会提醒您不要使用此类设计。

我通常做的是定义另一个方法,比如init(),我必须在实例化之后在我自己的代码中调用一个新对象。 (我必须记住,在我的应用程序中,无处不在。)构造函数执行基本的,甚至是通用的设置,然后我的init例程执行更多操作。

因为,IIRC,JavaScript实际上没有“析构函数”,我还经常定义一个free()例程,再一次,我不得不在一个对象上调用它然后让它消失在阴暗之中,最终收获。

这是一种自我强加的学科,对我来说似乎很有效。

答案 2 :(得分:0)

您的主要担心似乎依赖于功能?在警报的情况下,这种恐惧可能是没有根据的,因为警报是大多数javascript实现的原生。鉴于此,这是一个注入函数的愚蠢示例,它允许解耦构造函数及其依赖的函数:

    function alertSomething (message){
    alert(message);
} 

function logSomething (message){
    console.log(message);
}

//inject the function into your constructor instead
function Animal(name, messageDeliverySystem){
    this.name = name;
    this.deliverMessage = messageDeliverySystem;
}

var animalWhoLikesToLog = new Animal("Bob the logging bear", logSomething);
var animalWhoPrefersAlert = new Animal("Franky the alert happy Seal", alertSomething);

animalWhoLikesToLog.deliverMessage("Hi, I am Bob");
animalWhoPrefersAlert.deliverMessage("Hi, Franky here!");

就像我说的那样,这很愚蠢,因为console.log和alert在大多数情况下是原生的,但它可以帮助你理解。