Код, который я выполняю, пытается создать новый объект Message из другого объекта Message, в который встроены объекты Message. В одном из сеттеров это терпит неудачу в verifyValue. Код работает с protobuf. * 1013 * версия 5.
case ProtoBuf.TYPES["message"]: {
if (!value || typeof value !== 'object')
fail(typeof value, "object expected");
if (value instanceof this.resolvedType.clazz)
return value;
if (value instanceof ProtoBuf.Builder.Message) {
// Mismatched type: Convert to object (see: https://github.com/dcodeIO/ProtoBuf.js/issues/180)
var obj = {};
for (var i in value)
if (value.hasOwnProperty(i))
obj[i] = value[i];
value = obj;
}
// Else let's try to construct one from a key-value object
return new (this.resolvedType.clazz)(value); // May throw for a hundred of reasons
Проблема в экземпляре строки ProtoBuf.Builder.Message.
Я выполнил следующие тесты в коде Visual Studio:
>ProtoBuf.Builder.Message
function() { … }
[[FunctionLocation]]:internal#location
[[Scopes]]:Scopes[4]
[[StableObjectId]]:7
arguments:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
caller:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
length:0
name:""
prototype:Object {constructor: }
__proto__:function () { … }
>value
Message {endorser: ByteBuffer, signature: ByteBuffer}
>value instanceof ProtoBuf.Builder.Message
false
При отладке в protobuf. * 1014 * экземпляр теста не пройден. Однако, когда я запустил следующий код в том же сеансе отладки, добавив оператор require, тест прошел.
>var ProtoBuf = require("protobufjs");
>ProtoBuf.Builder.Message
function() { … }
[[FunctionLocation]]:internal#location
[[Scopes]]:Scopes[4]
[[StableObjectId]]:1
arguments:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
caller:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
length:0
name:""
prototype:Object {constructor: }
__proto__:function () { … }
>value instanceof ProtoBuf.Builder.Message
true
Может кто-нибудь объяснить, почему это происходит?