diff --git a/src/v8_typed_array.cc b/src/v8_typed_array.cc index 2fe0196231c..f44503edc02 100644 --- a/src/v8_typed_array.cc +++ b/src/v8_typed_array.cc @@ -88,7 +88,7 @@ class ArrayBuffer { static v8::Handle V8New(const v8::Arguments& args) { if (!args.IsConstructCall()) - return ThrowTypeError("Constructor cannot be called as a function."); + return node::FromConstructorTemplate(GetTemplate(), args); // To match Chrome, we allow "new ArrayBuffer()". // if (args.Length() != 1) @@ -241,7 +241,7 @@ class TypedArray { private: static v8::Handle V8New(const v8::Arguments& args) { if (!args.IsConstructCall()) - return ThrowTypeError("Constructor cannot be called as a function."); + return node::FromConstructorTemplate(GetTemplate(), args); // To match Chrome, we allow "new Float32Array()". // if (args.Length() != 1) @@ -613,7 +613,7 @@ class DataView { private: static v8::Handle V8New(const v8::Arguments& args) { if (!args.IsConstructCall()) - return ThrowTypeError("Constructor cannot be called as a function."); + return node::FromConstructorTemplate(GetTemplate(), args); if (args.Length() < 1) return ThrowError("Wrong number of arguments."); diff --git a/test/simple/test-typed-arrays.js b/test/simple/test-typed-arrays.js index 3f74c58586b..9b55ee87c93 100644 --- a/test/simple/test-typed-arrays.js +++ b/test/simple/test-typed-arrays.js @@ -50,8 +50,14 @@ var assert = require('assert'); obj = new DataView(obj.buffer || obj); assert.equal(obj.toString(), '[object DataView]'); assert.equal(Object.prototype.toString.call(obj), '[object DataView]'); + + // Calling constructor as function should work. + clazz(32); }); +// Calling constructor as function should work. +DataView(ArrayBuffer(32)); + var buffer = new ArrayBuffer(16); var uint8 = new Uint8Array(buffer); var uint16 = new Uint16Array(buffer);