-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path5-5.html
68 lines (59 loc) · 1.52 KB
/
5-5.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<!DOCTYPE html>
<!-- sandbox -->
<script>
function Sandbox(){
var args = Array.prototype.slice.call(arguments),
callback = args.pop(), // 最後の引数はcallback
modules = (args[0] && typeof args[0] === 'string') ? args : args[0],
i;
// この関数がコンストラクタとして呼ばれたか確認
if(!(this instanceof Sandbox)){
return new Sandbox(modules, callback);
}
// thisプロパティに追加
this.a = 1;
this.b = 2;
// モジュールをthisオブジェクトに追加
if(!modules || modules === '*'){
modules = [];
for(i in Sandbox.modules){
if(Sandbox.modules.hasOwnProperty(i)){
modules.push(i);
}
}
}
// モジュールの初期化
for(i = 0; i < modules.length; i += 1){
Sandbox.modules[modules[i]](this);
}
// コールバックを呼び出す
callback(this);
}
Sandbox.modules = {};
Sandbox.modules.dom = function(box){
box.getElement = function(){
console.log('hogehoge');
};
box.getStyle = function(){};
box.foo = 'bar';
};
Sandbox.modules.event = function(box){
box.attachEvent = function(){};
box.dettachEvent = function(){};
};
Sandbox.modules.ajax = function(box){
box.makeRequest = function(){};
box.makeResponse = function(){};
};
// 必要に応じてpropertyプロパティを設定
Sandbox.prototype = {
name: 'My Application',
version: '1.0',
getName: function(){
return this.name;
}
};
new Sandbox('dom', function(box){
console.log(box.getElement()); // hogehogeが返ってくる
});
</script>