@@ -9,23 +9,7 @@ MyObject::~MyObject() {
99}
1010
1111void MyObject::Init (node::js::value env, node::js::value exports) {
12- /*
13- Nan::HandleScope scope;
14-
15- // Prepare constructor template
16- v8::Local<v8::FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(New);
17- tpl->SetClassName(Nan::New("MyObject").ToLocalChecked());
18- tpl->InstanceTemplate()->SetInternalFieldCount(1);
19-
20- // Prototype
21- Nan::SetPrototypeMethod(tpl, "value", GetValue);
22- Nan::SetPrototypeMethod(tpl, "plusOne", PlusOne);
23- Nan::SetPrototypeMethod(tpl, "multiply", Multiply);
24-
25- constructor.Reset(tpl->GetFunction());
26- exports->Set(Nan::New("MyObject").ToLocalChecked(), tpl->GetFunction());
27- */
28- node::js::value function = node::js::CreateFunction (env, New);
12+ node::js::value function = node::js::CreateConstructorForWrap (env, New);
2913 node::js::SetFunctionName (env, function, node::js::CreateString (env, " MyObject" ));
3014 node::js::value prototype =
3115 node::js::GetProperty (env, function, node::js::PropertyName (env, " prototype" ));
@@ -64,53 +48,43 @@ void MyObject::New(node::js::value env, node::js::FunctionCallbackInfo info) {
6448*/
6549
6650 // assumes its a constructor call
67- node::js::value args[1 ];
68- node::js::GetCallbackArgs (info, args, 1 );
69- double value = 0 ;
70- if (node::js::GetUndefined (env) != args[0 ]) {
71- value = node::js::GetNumberFromValue (args[0 ]);
51+ if (node::js::IsContructCall (env, info)) {
52+ node::js::value args[1 ];
53+ node::js::GetCallbackArgs (info, args, 1 );
54+ double value = 0 ;
55+ if (node::js::GetUndefined (env) != args[0 ]) {
56+ value = node::js::GetNumberFromValue (args[0 ]);
57+ }
58+ MyObject* obj = new MyObject (value);
59+ node::js::value jsobj = node::js::GetCallbackObject (env, info);
60+ node::js::Wrap (env, jsobj, (void *) obj, nullptr );
61+ node::js::SetReturnValue (env, info, jsobj);
62+ } else {
63+ node::js::value args[1 ];
64+ node::js::GetCallbackArgs (info, args, 1 );
65+ const int argc = 1 ;
66+ node::js::value argv[argc] = { args[0 ] };
67+ node::js::value cons = node::js::GetPersistentValue (env, constructor);
68+ node::js::SetReturnValue (env, info, node::js::NewInstance (env, cons, argc, argv));
7269 }
73- MyObject* obj = new MyObject (value);
74- node::js::value jsobj = node::js::GetCallbackObject (env, info);
75- node::js::Wrap (env, jsobj, (void *) obj);
76- // node::js::SetReturnValue(env, info, jsobj);
7770}
7871
7972void MyObject::GetValue (node::js::value env, node::js::FunctionCallbackInfo info) {
80- /*
81- MyObject* obj = ObjectWrap::Unwrap<MyObject>(info.Holder());
82- info.GetReturnValue().Set(Nan::New(obj->value_));
83- */
8473 MyObject* obj = (MyObject*) node::js::Unwrap (env, node::js::GetCallbackObject (env, info));
85- node::js::SetReturnValue (env, info, node::js::CreateNumber (env, 0 ));
74+ node::js::SetReturnValue (env, info, node::js::CreateNumber (env, obj-> value_ ));
8675}
8776
8877void MyObject::PlusOne (node::js::value env, node::js::FunctionCallbackInfo info) {
89- /*
90- MyObject* obj = ObjectWrap::Unwrap<MyObject>(info.Holder());
91- obj->value_ += 1;
92- info.GetReturnValue().Set(Nan::New(obj->value_));
93- */
9478 MyObject* obj = (MyObject*) node::js::Unwrap (env, node::js::GetCallbackObject (env, info));
95- node::js::SetReturnValue (env, info, node::js::CreateNumber (env, 0 ));
79+ obj->value_ += 1 ;
80+ node::js::SetReturnValue (env, info, node::js::CreateNumber (env, obj->value_ ));
9681}
9782
9883void MyObject::Multiply (node::js::value env, node::js::FunctionCallbackInfo info) {
99- /*
100- MyObject* obj = ObjectWrap::Unwrap<MyObject>(info.Holder());
101- double multiple = info[0]->IsUndefined() ? 1 : info[0]->NumberValue();
102-
103- v8::Local<v8::Function> cons = Nan::New<v8::Function>(constructor);
104-
105- const int argc = 1;
106- v8::Local<v8::Value> argv[argc] = { Nan::New(obj->value_ * multiple) };
107-
108- info.GetReturnValue().Set(cons->NewInstance(argc, argv));
109- */
11084 node::js::value args[1 ];
11185 node::js::GetCallbackArgs (info, args, 1 );
11286
113- double multiple = 0 ;
87+ double multiple = 1 ;
11488 if (node::js::GetUndefined (env) != args[0 ]) {
11589 multiple = node::js::GetNumberFromValue (args[0 ]);
11690 }
@@ -119,6 +93,6 @@ void MyObject::Multiply(node::js::value env, node::js::FunctionCallbackInfo info
11993
12094 node::js::value cons = node::js::GetPersistentValue (env, constructor);
12195 const int argc = 1 ;
122- node::js::value argv[argc] = { node::js::CreateNumber (env, 1 * multiple) };
96+ node::js::value argv[argc] = { node::js::CreateNumber (env, obj-> value_ * multiple) };
12397 node::js::SetReturnValue (env, info, node::js::NewInstance (env, cons, argc, argv));
12498}
0 commit comments