ElementPrototype.verifyValue завершается ошибкой на объектах Message в protobuf. * ​​1000 * - PullRequest
0 голосов
/ 09 января 2020

Код, который я выполняю, пытается создать новый объект 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

Может кто-нибудь объяснить, почему это происходит?

...