我一直在玩“工厂功能”的概念,所以请考虑:
var HelloWorld = function() {
return {
hello: function() { console.log('hi'); }
}
}
我们所知道的实例化为:var helloWorld = HelloWorld();
这样一个函数的“构造函数”是否是它自己的函数?我有什么方法可以做到:HelloWorld.hello()
而不是像课程一样“实例化”吗?或者这是另一个概念吗?
答案 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()
应该是首选,但事实并非如此。有时候构造函数非常有用,因为你可以在构造期间建立惊人的原型关系。