-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.s.j
More file actions
112 lines (80 loc) · 1.82 KB
/
Copy pathscript.s.j
File metadata and controls
112 lines (80 loc) · 1.82 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// ================================
// Minimal Objective-J Style Runtime
// ================================
// Global class registry
const ClassRegistry = {};
// ================================
// Create Class
// ================================
function createClass(name, methods = {}, superClass = null) {
```
function ClassConstructor() {
this.__className = name;
if (methods.init) {
methods.init.apply(this, arguments);
}
}
// Inheritance
if (superClass) {
ClassConstructor.prototype =
Object.create(superClass.prototype);
}
// Attach methods
for (const key in methods) {
if (key !== "init") {
ClassConstructor.prototype[key] = methods[key];
}
}
// Register class
ClassRegistry[name] = ClassConstructor;
return ClassConstructor;
```
}
// ================================
// Message Send System
// ================================
function objj_msgSend(receiver, selector, ...args) {
```
if (!receiver) {
throw new Error(
`Cannot send '${selector}' to null`
);
}
const method = receiver[selector];
if (typeof method !== "function") {
throw new Error(
`Method '${selector}' not found`
);
}
return method.apply(receiver, args);
```
}
// ================================
// Example Class
// ================================
const Person = createClass("Person", {
```
init(name) {
this.name = name;
},
speak() {
console.log(
`Hello, my name is ${this.name}`
);
},
add(a, b) {
return a + b;
}
```
});
// ================================
// Instantiate Object
// ================================
const user = new Person("Yakub");
// ================================
// Objective-J Style Messaging
// ================================
objj_msgSend(user, "speak");
const result =
objj_msgSend(user, "add", 5, 9);
console.log(result);