【发布时间】:2017-01-12 01:48:03
【问题描述】:
我正在试验一个简单的 Javascript API 客户端,但不确定如何实现构造函数模式。
到目前为止,我有这个(基于 Stripe 的 NodeJS 客户端):
//myapp.js
'use strict';
MyApp.DEFAULT_HOST = 'api.myapp.io';
MyApp.DEFAULT_PORT = '443';
MyApp.DEFAULT_BASE_PATH = '/v1/';
function MyApp() {
if(!(this instanceof MyApp)) {
return new MyApp();
}
}
MyApp.prototype = {
init: function(appId) {
console.log("Initializing");
}
}
在我的 HTML 文件中:
...
<head>
<script type="text/javascript" src="myapp.js"</script>
<script type="text/javascript">
var client = new MyApp();
client.init('12345');
</script>
</head>
...
我不希望此客户端的用户需要添加 var client = new MyApp(); 行。如何修改myapp.js,让用户只需要像这样使用MyApp.init('12345');这一行:
...
<head>
<script type="text/javascript" src="myapp.js"</script>
<script type="text/javascript">
MyApp.init('12345');
</script>
</head>
...
【问题讨论】:
-
这听起来像您希望
MyApp成为单例 - 这既不是一个好习惯,也与构造函数无关。 -
除非您正在执行副作用,否则不要使用
init方法,而是将所有内容放入构造函数中。 -
谢谢。那么如果一切都在构造函数中,我将如何传递应用 ID?
-
构造函数也有参数。
-
我意识到构造函数也有参数,但是从使用 SDK 的人的角度来看,他们需要做什么才能从 HTML 文件中传递 AppId?一个简单的例子会很好。干杯
标签: javascript oop constructor