账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    immutability-helper 源码的疑惑
    23
    0

    在看immutability-helper的源码,对其中一段函数很疑惑

      update.isEquals = function(a, b) { return a === b; };
    
      function update(object, spec) {
        if (typeof spec === 'function') {
          return spec(object);
        }
    
        if (!(Array.isArray(object) && Array.isArray(spec))) {
          invariant(
            !Array.isArray(spec),
            'update(): You provided an invalid spec to update(). The spec may ' +
            'not contain an array except as the value of $set, $push, $unshift, ' +
            '$splice or any custom command allowing an array value.'
          );
        }
    
        invariant(
          typeof spec === 'object' && spec !== null,
          'update(): You provided an invalid spec to update(). The spec and ' +
          'every included key path must be plain objects containing one of the ' +
          'following commands: %s.',
          Object.keys(commands).join(', ')
        );
    
        var nextObject = object;
        var index, key;
        getAllKeys(spec).forEach(function(key) {
          if (hasOwnProperty.call(commands, key)) {
            var objectWasNextObject = object === nextObject;
            nextObject = commands[key](spec[key], nextObject, spec, object);
            // update.isEquals(nextObject, object) 为true那不就是 nextObject 一定等于 object, 再写 nextObject = object 有什么意义
            if (objectWasNextObject && update.isEquals(nextObject, object)) {
              nextObject = object;
            }
          } else {
            var nextValueForKey =
              type(object) === 'Map'
                ? update(object.get(key), spec[key])
                : update(object[key], spec[key]);
            if (!update.isEquals(nextValueForKey, nextObject[key]) || typeof nextValueForKey === 'undefined' && !hasOwnProperty.call(object, key)) {
              if (nextObject === object) {
                nextObject = copy(object);
              }
              if (type(nextObject) === 'Map') {
                nextObject.set(key, nextValueForKey);
              } else {
                nextObject[key] = nextValueForKey;
              }
            }
          }
        })
        return nextObject;
      }

    这段函数有什么意义? update.isEquals(nextObject, object)不就表示两者相等了

    if (objectWasNextObject && update.isEquals(nextObject, object)) {
              nextObject = object;
    }
            
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 紫光极夜 普通会员 1楼

      immutability-helper是一个Java库,用于自动处理immutablemutable 类型之间的切换。它可以在编译时避免意外的更改,提供更好的代码质量和可维护性。

      然而,我对immutability-helper的源码有一些疑惑,包括以下几个方面:

      1. 它的实现方式:immutability-helper实现了一些内部逻辑,这使得我不太了解它的实现方式。这可能会影响我理解它的功能和性能。

      2. 它的工作原理:我并不完全理解immutability-helper的工作原理。例如,它如何决定哪些类型可以互换?它是如何在不修改源代码的情况下改变类型?

      3. 它的安全性:虽然immutability-helper提供了一些功能来避免意外的更改,但我并不完全信任它的安全性。例如,它是否能够处理所有类型的类型?它是否能够处理类型转换和副作用?

      4. 它的可扩展性:immutability-helper可能不是最佳的选择,因为它可能会限制代码的可扩展性。我是否应该考虑使用其他库来实现同样的功能?

      总的来说,我对immutability-helper的源码有一些疑问,但我也对其提供的一些功能和性能感到乐观。在使用它之前,我建议我先深入阅读它的源码,以更好地理解它的功能和性能。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部