46 lines
1.1 KiB
Plaintext
46 lines
1.1 KiB
Plaintext
|
// This script simulates object-oriented programming (OOP) techniques
|
||
|
// using function pointers (Fn) and object maps.
|
||
|
|
||
|
// Define object
|
||
|
let obj1 = #{
|
||
|
_data: 42, // data field
|
||
|
get_data: Fn("getData"), // property getter
|
||
|
action: Fn("action"), // method
|
||
|
update: Fn("update1") // property setter
|
||
|
};
|
||
|
|
||
|
fn getData() {
|
||
|
this._data
|
||
|
}
|
||
|
fn action() {
|
||
|
print("Data=" + this._data);
|
||
|
}
|
||
|
fn update1(x) {
|
||
|
this._data = x;
|
||
|
this.action();
|
||
|
}
|
||
|
|
||
|
if obj1.get_data() > 0 { // property access
|
||
|
obj1.update(123); // call method
|
||
|
} else {
|
||
|
print("we have a problem here");
|
||
|
}
|
||
|
|
||
|
// Define another object based on the first object
|
||
|
let obj2 = #{
|
||
|
_data: 0, // data field - new value
|
||
|
update: Fn("update2") // property setter - another function
|
||
|
};
|
||
|
obj2.fill_with(obj1); // add all other fields from obj1
|
||
|
|
||
|
fn update2(x) {
|
||
|
this._data = x * 2;
|
||
|
this.action();
|
||
|
}
|
||
|
|
||
|
if obj2.get_data() > 0 { // property access
|
||
|
obj2.update(0); // call method
|
||
|
} else {
|
||
|
obj2.update(42); // call method
|
||
|
}
|