你会怎么写“构造函数”

时间:2016-04-09 15:21:53

标签: javascript

我一直在玩“工厂功能”的概念,所以请考虑:

var HelloWorld = function() {

    return  {
       hello: function() { console.log('hi'); }
    }
}

我们所知道的实例化为:var helloWorld = HelloWorld();这样一个函数的“构造函数”是否是它自己的函数?我有什么方法可以做到:HelloWorld.hello()而不是像课程一样“实例化”吗?或者这是另一个概念吗?

2 个答案:

答案 0 :(得分:1)

看一下以下代码:

var HelloWorldFactory = function(text) {
    return  {
       hello: function() { console.log(text); }
    }
};
var HelloWorld = {
  hello: function() { console.log('hi2'); }
};
var helloWorld = HelloWorldFactory('hi');
helloWorld.hello();
HelloWorld.hello();

正如@Quentin在评论中提到的,通过调用HelloWorldFactory('hi');你没有调用js构造函数,而只是一个返回一个对象的函数。

执行HelloWorld.hello();是一个不同的概念,因为你只使用了aleardy定义的对象(它可以通过工厂创建或只是在代码中定义)

答案 1 :(得分:1)

在您的示例中,您将返回具有function属性的对象文字。你也可以直接返回一个函数。但最后这是工厂模式,并创建了功能'构造函数是Function函数而不是HelloWorld函数的原型,就像构造函数一样。

函数是JS中的纯对象。你可以像对象一样对待它们。所以你喜欢做什么。

function HelloWorld(){};

     HelloWorld.thank = function(){console.log("thanks")};
   HelloWorld.message = "hello";
HelloWorld.sayMessage = function(){console.log(HelloWorld.message)};

但构造函数略有不同。使用new关键字调用它们,如上所述,它们将自己的原型分配给创建的对象。它是JS最复杂的部分之一。我见过很多人认为new没用,最好避免使用,Object.create()应该是首选,但事实并非如此。有时候构造函数非常有用,因为你可以在构造期间建立惊人的原型关系。