-
Notifications
You must be signed in to change notification settings - Fork 600
/
Copy pathmyobject.cc
72 lines (55 loc) · 2 KB
/
myobject.cc
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
#include "myobject.h"
Napi::Object MyObject::Init(Napi::Env env, Napi::Object exports) {
Napi::Function func = DefineClass(
env,
"MyObject",
{InstanceMethod("plusOne", &MyObject::PlusOne),
InstanceMethod("getValue", &MyObject::GetValue),
InstanceAccessor("value", &MyObject::GetValue, &MyObject::SetValue),
InstanceMethod("multiply", &MyObject::Multiply)});
Napi::FunctionReference* constructor = new Napi::FunctionReference();
*constructor = Napi::Persistent(func);
env.SetInstanceData(constructor);
exports.Set("MyObject", func);
return exports;
}
MyObject::MyObject(const Napi::CallbackInfo& info)
: Napi::ObjectWrap<MyObject>(info) {
Napi::Env env = info.Env();
int length = info.Length();
if (length <= 0 || !info[0].IsNumber()) {
Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException();
return;
}
Napi::Number value = info[0].As<Napi::Number>();
this->value_ = value.DoubleValue();
}
Napi::Value MyObject::GetValue(const Napi::CallbackInfo& info) {
double num = this->value_;
return Napi::Number::New(info.Env(), num);
}
void MyObject::SetValue(const Napi::CallbackInfo& info,
const Napi::Value& value) {
Napi::Env env = info.Env();
if (!value.IsNumber()) {
Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException();
return;
}
Napi::Number num = value.As<Napi::Number>();
this->value_ = num.DoubleValue();
}
Napi::Value MyObject::PlusOne(const Napi::CallbackInfo& info) {
this->value_ = this->value_ + 1;
return MyObject::GetValue(info);
}
Napi::Value MyObject::Multiply(const Napi::CallbackInfo& info) {
Napi::Number multiple;
if (info.Length() <= 0 || !info[0].IsNumber()) {
multiple = Napi::Number::New(info.Env(), 1);
} else {
multiple = info[0].As<Napi::Number>();
}
Napi::Object obj = info.Env().GetInstanceData<Napi::FunctionReference>()->New(
{Napi::Number::New(info.Env(), this->value_ * multiple.DoubleValue())});
return obj;
}