Skip to content

Latest commit

 

History

History
40 lines (35 loc) · 1.32 KB

JSPatchDetail.md

File metadata and controls

40 lines (35 loc) · 1.32 KB

准备工作

先通过 git submodule 把代码拉下来。。。
非常重要的是作者写的文档 JSPatch 实现原理详解

一些基本原理

console.log 中转的实现

JPEngine 启动后,调用了以下代码在 js 添加 _OC_log 来打log到Xcode控制台:

    context[@"_OC_log"] = ^() {
        NSArray *args = [JSContext currentArguments];
        for (JSValue *jsVal in args) {
            id obj = formatJSToOC(jsVal);
            NSLog(@"JSPatch.log: %@", obj == _nilObj ? nil : (obj == _nullObj ? [NSNull null]: obj));
        }
    };

js 中调用 console.log 时:

 if (global.console) {
    var jsLogger = console.log;
    global.console.log = function() {
      global._OC_log.apply(global, arguments);
      if (jsLogger) {
        jsLogger.apply(global.console, arguments);
      }
    }
  } else {
    global.console = {
      log: global._OC_log
    }
  }

REF